基于 JavaScript 中键属性对对象进行分组


我们有一个 parentArray,它包含许多子数组,每个子数组都是一个包含两个属性(键和值)的对象数组。在一个子数组中,可以确认两个对象不能有相同的键,但是所有子数组都有一组相同的 n 个键,其中 n 是子数组的大小。

我们的工作是准备一个对象,其中键为对象的键,值是包含该特定键的所有值的数组。

以下是一个示例 parent 数组−

const parentArray = [[
{
   key: 123,
   value: 'India'
}, {
   key: 124,
   value: 'USA'
}, {
   key: 125,
   value: 'Japan'
}, {
   key: 126,
   value: 'Denmark'
}, {
   key: 127,
   value: 'Austria'
},
], [
{
   key: 124,
   value: 'Kenya'
}, {
   key: 126,
   value: 'UK'
}, {
   key: 123,
   value: 'Germany'
}, {
   key: 127,
   value: 'Spain'
}, {
   key: 125,
   value: 'Portugal'
},
]];

我们将遍历 parent 数组,然后逐个遍历所有子数组,如果我们找到匹配的键,我们会将其推入值数组,否则我们会创建一个新的值数组。

完整的代码如下所示−

const parentArray = [[
{
   key: 123,
   value: 'India'
}, {
   key: 124,
   value: 'USA'
}, {
   key: 125,
   value: 'Japan'
}, {
   key: 126,
   value: 'Denmark'
}, {
   key: 127,
   value: 'Austria'
},
], [
{
   key: 124,
   value: 'Kenya'
}, {
   key: 126,
   value: 'UK'
}, {
   key: 123,
   value: 'Germany'
}, {
   key: 127,
   value: 'Spain'
}, {
   key: 125,
   value: 'Portugal'
},
]];
const map = {};
parentArray.forEach(arr => {
   arr.forEach(obj => {
      const { key, value } = obj;
      if(map[key]){
         map[key].push(value);
      }else{
         map[key] = [value]
      }
   })
});
console.log(map);

控制台中的输出结果如下−

{
   '123': [ 'India', 'Germany' ],
   '124': [ 'USA', 'Kenya' ],
   '125': [ 'Japan', 'Portugal' ],
   '126': [ 'Denmark', 'UK' ],
   '127': [ 'Austria', 'Spain' ]
}

更新于:09-Oct-2020

337 次浏览

启动你的职业

完成该课程即可获得认证

入门
广告