我们有一个数组数组,每个子数组恰好包含两个元素,第一个是字符串,在这种情况下是人名,第二个是整数,我们需要做的是将所有第一个元素相同的子数组与第二个元素应该是公共子数组的第二个元素的和。
以下是我们的示例数组-
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)。