将对象数组转换为具有按键名分组的属性值的对象 [英] Convert array of objects into object with property values grouped by key name

查看:44
本文介绍了将对象数组转换为具有按键名分组的属性值的对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如果输入数据中有更多对象,该如何动态地进行操作?

How to do it dynamically if we have more objects in input data?

我有一个数据集数组,其中有多个对象,对象可以是任意数量.而且我必须将此数据转换为带有内部动态数组的newDataset对象,该数字数组依赖于数据集数组的对象.如果我们知道数据集数组对象的数量,则可以执行此操作.例如:请参见下文.

I have dataset array with multiple objects inside it, and objects can be any number. and I have to convert this data into newDataset object with dynamic array inside of it, this array of number dependence on dataset array's objects. I have done this if we have known number of dataset array's objects. for example: see below.

// Input data have dynamic more objects.
var dataset = [
  {
    date: "1 Jan 2020",
    data1: 44,
    data2: 40,
  },
  {
    date: "2 Jan 2020",
    data1: 37,
    data2: 60,
  },
  {
    date: "3 Jan 2020",
    data1: 75,
    data2: 90,
  },
];

var newDataset = {};

// // Output data should be in this form.
// var newDataset = {
//   date: ["1 Jan 2020", "2 Jan 2020", "3 Jan 2020"],
//   data1: [44, 37, 75],
//   data2: [40, 60, 90],
// };


// write your code below

var date = [];
var data1 = [];
var data2 = [];

for (var i = 0; i < dataset.length; i++) {
  date.push(dataset[i].date);
  data1.push(dataset[i].data1);
  data2.push(dataset[i].data2);
}

newDataset.date = date;
newDataset.data1 = data1;
newDataset.data2 = data2;
console.log(newDataset);

//end of your code

推荐答案

您可以使用 Map 对象

var dataset = [
  { date: "1 Jan 2020", data1: 44, data2: 40 },
  { date: "2 Jan 2020", data1: 37, data2: 60 },
  { date: "3 Jan 2020", data1: 75, data2: 90 }
];

const myMap = new Map();

dataset.forEach(obj => {
  Object.entries(obj).forEach(([k, v]) => {
    myMap.has(k) ? myMap.get(k).push(v) : myMap.set(k, [v]);
  })
});

console.log(Object.fromEntries(myMap.entries()));

.as-console-wrapper{min-height:100% !important; top: 0; }

这篇关于将对象数组转换为具有按键名分组的属性值的对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆