合并数组数组中唯一项并求和 - JavaScript

javascriptweb developmentobject oriented programming

我们有一个数组数组,每个子数组恰好包含两个元素,第一个是字符串,在本例中是人名,第二个是整数,我们需要做的是合并所有第一个元素相同的子数组,第二个元素应该是公共子数组的第二个元素之和。

以下是我们的示例数组 −

const example = [[
   'first',
   12
], [
   'second',
   19
], [
   'first',
   7
]];

应转换为以下内容

const example = [[
   'first',
   19
   ], [
      'second',
      19
   ]
];

假设我们编写一个函数 CombineArray(),该函数将数组作为输入并返回组合数组作为输出,则该函数的代码将是−

示例

const people = [
   ['Ram', 21],
   ['Mohan', 33],
   ['Vikram', 25],
   ['Mike', 29],
   ['Mohan', 41],
   ['Vikram', 26]
];
const combineArray = (people) => {
   const map = {};
   for(const index in people){
      const name = people[index][0];
      const prop = people[index][1];
      if(map[name]){
         map[name] += prop;
      }else{
         map[name] = prop;
      }
   }
   return Object.keys(map).map(key => [key, map[key]]);
}
console.log(combineArray(people));

输出

控制台中的输出将是 −

[ [ 'Ram', 21 ], [ 'Mohan', 74 ], [ 'Vikram', 51 ], [ 'Mike', 29 ] ]

了解 CombineArray 函数 −

它遍历数组,将名称作为键并将 prop 作为对象中的值进行映射,确保将重复的键加在一起,最后将对象转换为数组的数组并返回。

此函数的时间复杂度为 O(2n),通常四舍五入为 O(n),空间复杂度也是 O(n)


相关文章