【问题标题】:Combining assigning Object literal to new array and forEach over another array at the same time将 Object 字面量分配给新数组并同时将 forEach 分配给另一个数组
【发布时间】:2020-05-15 16:18:31
【问题描述】:

您好,我有这段代码,它正在工作

  for (let i in list) {
    db.push({
      name: list[i],
      values: []
    });

    for (let j in data) {
      db[i].values.push({
        Date: data[j].Date,
        count: parseInt(data[j][list[i]])
      });
    };
    db[i].values.pop();
  };

我想把它转换成这个

  list.forEach((el, i) => {
    db.push({
      name: list[i],
      values: Array.prototype.call(data.forEach((d, j) => {
        this.push({
          Date: data[j].Date,
          count: parseInt(data[j][list[i]])
        });
      }))
    })
  })

【问题讨论】:

  • 没有Array.prototype.call方法。
  • 请将dblistdata的初始值添加到您的代码sn-p中。从目前的帖子来看,甚至不清楚它们是对象还是数组。
  • 正如我所说的第一部分正在工作,我正在尝试改进我的代码,所以很明显它们是数组
  • 在这种情况下,请查看why is using for…in on arrays such a bad idea?

标签: javascript arrays object ecmascript-6 push


【解决方案1】:

您可以对数据进行切片以仅获取没有最后一项的项目并映射值。

let shortData = data.slice(0, -1),
    db = list.map(name => ({
        name,
        values: shortData.map(({ Date, [name]: count }) => ({
            Date,
            count: +count
        })
    });

【讨论】:

  • 你为我打开了一个新窗口
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-27
  • 1970-01-01
  • 2018-09-03
相关资源
最近更新 更多