javascript - 遍历对象键和值并返回一个新对象

标签 javascript arrays javascript-objects

我有一个对象数组,它们共享共同的属性名称,但具有不同的值。例如,它们是这样的:

let data = [
    {
      value1: "11:00",
      value2: 0.737462,
      value3: 1.345341,
      value4: 0.684655
    },
    {
      value1: "12:00",
      value2: 0.894368,
      value3: 1.55891,
      value4: 0.784655
    },
    {
      value1: "13:00",
      value2: 1.140516,
      value3: 1.938695,
      value4: 0.454655
    }
]

从这些对象中,我需要形成一个新的对象数组,类似于:

let datasets = [
    {
        label: "value1",
        data: ["11:00", "12:00", "13:00"]
    },
    {
        label: "value2",
        data: [0.737462,0.894368,1.140516,]
    }
    // and so on
]

这样我的数据集中的每个对象都将包含原始对象的属性名称作为 label 的值以及与该名称对应的属性数组。我试过这样做:

let datasets = data.map((n) => {
    for (i in n) {
        return {
            label: i,
            data: data.map(obj => obj[i])
        }
    }
});

但它并没有像预期的那样工作——它只返回一个对象数组,只有第一个属性名称作为所有对象的标签。我猜这是因为它一到达 for...in 循环中的第一项就返回,但我想不出更好的方法来实现我的需要。

最佳答案

预期数组中的元素数量等于数组元素中键的数量,因此对其进行映射,然后运行另一个简单映射以生成数据数组。

var out = Object.keys(data[0]).map(function(key) {
  return {
    label: key,
    data: data.map(function(obj) {
      return obj[key];
    })
  };
}

关于javascript - 遍历对象键和值并返回一个新对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47820237/

相关文章:

javascript - 如何通过键从 MongoDB 集合中删除字段?

PHP:检查是否为 0?

javascript - 访问三元数组中对象的属性

javascript - 使用另一个数组的对象属性对数组进行排序

arrays - JavaScript 根据属性值过滤对象数组

javascript - 如何在 chart.js 中将日期显示为 x 轴上的标签

使用 Win8 的 Javascript 漫游设置

javascript - 当 onBegin 失败时,Ajax.BeginForm 不隐藏加载元素

javascript - 获取对象数组中键的名称 - JS

javascript - 通过调用函数定义Javascript的对象属性