【问题标题】:Iterating over an array and appending its values to a dictionary in javascript遍历数组并将其值附加到javascript中的字典
【发布时间】:2021-09-21 13:24:15
【问题描述】:

我正在尝试遍历具有数组形式的值的字典,这些值我想放入字典中我很困惑我应该怎么做才能获得这个

这是我要迭代的数据:

{
t: ["20181019,20181022,...."],
o: ["180.34,189.45,..."],
h: ["180.99,181.40,..."],
l: ["178.57,177.56,...."],
c: ["179.85 ,178.75,...."]
}

这是最终产品的外观:

[
    { time: '20181019', open: 180.34, high: 180.99, low: 178.57, close: 179.85 },
    { time: '20181022', open: 180.82, high: 181.40, low: 177.56, close: 178.75 },
    { time: '20190509', open: 193.31, high: 195.08, low: 191.59, close: 194.58 },
]

【问题讨论】:

  • 你试过什么?我们必须听取您的想法,以便我们为您提供帮助。如果您不考虑问题并在线获得答案,那么您将不会学到东西。无论您解决问题的方法有多么少,都可以添加任何内容
  • 我已经尝试映射它但仍然遇到问题
  • 好的。你用过.map()?请添加到问题中。您也需要断开字符串。所有的字符串也将具有相同的数字(/逗号?。添加此类详细信息
  • 每个数组的长度相同还是不同?

标签: javascript arrays loops backend


【解决方案1】:

您可以使用Object.keysreduce轻松实现结果

const obj = {
  t: ["20181019,20181022"],
  o: ["180.34,189.45"],
  h: ["180.99,181.40"],
  l: ["178.57,177.56"],
  c: ["179.85 ,178.75"],
};

const dict = { t: "time", o: "open", h: "high", l: "low", c: "close" };

const tempObj = Object.keys(obj).forEach((k) => (obj[k] = obj[k][0].split(",")));

const result = Array.from({ length: obj.t.length }, (_, i) => {
  return Object.entries(obj).reduce((acc, [k, v]) => {
        acc[dict[k]] = k === "t" ? v[i] : +v[i];
    return acc;
  }, {});
});

console.log(result);
/* This is not a part of answer. It is just to give the output fill height. So IGNORE IT */
.as-console-wrapper { max-height: 100% !important; top: 0; }

【讨论】:

  • 它显示Uncaught TypeError: obj[k][0].split is not a function
  • 与所有其他答案一样
  • 我正在从这个wesbite获取我的数据
  • 您拼错了问题。 data.t 变量是一个数组,但您键入了一个字符串 ["20181019,20181022,...."]。应该是这样的['20181019','20181022',...."]。看看这个stackblitz
【解决方案2】:

这里是快速解决方案:

const data = {
  t: ['20181019,20181022,....'],
  o: ['180.34,189.45,...'],
  h: ['180.99,181.40,...'],
  l: ['178.57,177.56,....'],
  c: ['179.85 ,178.75,....'],
};

let prepared = {};
Object.keys(data).map((key) => {
  prepared[key] = data[key][0].split(',');
});

const res = prepared.t.map((tVal, index) => {
  return {
    time: tVal,
    open: prepared.o[index],
    high: prepared.h[index],
    low: prepared.l[index],
    close: prepared.c[index],
  };
});

console.log(res);

【讨论】:

    【解决方案3】:

    试试下面的代码。

    var data = {
      t: ["20181019,20181022"],
      o: ["180.34,189.45"],
      h: ["180.99,181.40"],
      l: ["178.57,177.56"],
      c: ["179.85 ,178.75"]
    }
    
    var res = [];
    
    const open = data.o.toString().split(",");
    const high = data.h.toString().split(",");
    const low = data.l.toString().split(",");
    const close = data.c.toString().split(",");
    
    data.t.toString().split(",").forEach((item, index) => {
      res.push({
        time : item,
        open : open[index],
        high: high[index],
        low: low[index],
        close: close[index]
      });
    })
    
    console.log(res);

    【讨论】:

    • 感谢您的回答
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-27
    • 1970-01-01
    • 1970-01-01
    • 2019-08-07
    • 1970-01-01
    相关资源
    最近更新 更多