提问者:小点点

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


我有很多数组。 我可以将它们与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个答案

匿名用户

您可以使用reduce将所有数组合并为一来求和值,然后应用sort()根据score进行排序:

null

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);