来自不同数组的相同元素的总和

时间:2020-06-27 14:17:57

标签: javascript

我有很多数组。我可以将它们与for循环一起列出,但是,如果这些不同的数组中有相同的元素,则只需要显示每个元素一次。例如;

var array01 = [["Jack","92"],["Tom","74"],["Lily","100"],["Jonah","62"],["Lucy","83"]];
var array02 = [["Tom","94"],["Emma","70"],["Jack","100"],["Arnold","91"],["Kate","53"]];
var array03 = [["Jack","72"],["Tom","84"],["Emma","91"],["Jonah","92"],["Lucy","63"]];
var array04 = [["Emma","88"],["Marshall","82"],["Arnold","68"],["Ted","62"],["Lily","73"]];
var array05 = [["Jonah","87"],["Lucy","86"],["Kate","71"],["Jack","66"],["Lily","93"]];

我想像这样从最高值到最低值进行排序:

杰克:330
莉莉:266
汤姆:252
艾玛:249
约拿:241
露西:232
阿诺德:159
凯特:124
马歇尔:82
特德:62

1 个答案:

答案 0 :(得分:2)

您可以使用reduce通过将所有数组合并为一个来求和,然后应用sort()来基于score进行排序:

var array01 = [["Jack","92"],["Tom","74"],["Lily","100"],["Jonah","62"],["Lucy","83"]];
var array02 = [["Tom","94"],["Emma","70"],["Jack","100"],["Arnold","91"],["Kate","53"]];
var array03 = [["Jack","72"],["Tom","84"],["Emma","91"],["Jonah","92"],["Lucy","63"]];
var array04 = [["Emma","88"],["Marshall","82"],["Arnold","68"],["Ted","62"],["Lily","73"]];
var array05 = [["Jonah","87"],["Lucy","86"],["Kate","71"],["Jack","66"],["Lily","93"]];

var all=[...array01,...array02,...array03,...array04,...array05];

var result = Object.values(all.reduce((acc, [key, val])=>{
    acc[key] = acc[key] || {[key]:0};
    acc[key][key]+=+val;
    return acc;
},{})).sort((a,b)=>Object.values(b)[0]-Object.values(a)[0]);

console.log(result);