如何在JavaScript中基于条件对数组中的对象求和

如何在JavaScript中基于条件对数组中的对象求和,javascript,algorithm,Javascript,Algorithm,下面有两个数组,arr1和arr2。我只想计算arr2中存在的人的总分 例如: 我预计结果分数为130分,这是Mike(90)+Steve(40)得出的。您可以使用reduce和find: const arr1=[ {完成人:1,姓名:“约翰”,分数:60}, {完成人:2,姓名:“迈克”,分数:90}, {完成人:3,姓名:“鲍勃”,分数:50}, {完成人:4,姓名:“史蒂夫”,分数:40}, {完成人:5,名字:“瑞克”,分数:10}, {完成人:6,姓名:“亚伦”,分数:30}, ],

下面有两个数组,arr1和arr2。我只想计算arr2中存在的人的总分

例如:


我预计结果分数为130分,这是Mike(90)+Steve(40)得出的。

您可以使用
reduce
find

const
arr1=[
{完成人:1,姓名:“约翰”,分数:60},
{完成人:2,姓名:“迈克”,分数:90},
{完成人:3,姓名:“鲍勃”,分数:50},
{完成人:4,姓名:“史蒂夫”,分数:40},
{完成人:5,名字:“瑞克”,分数:10},
{完成人:6,姓名:“亚伦”,分数:30},
],
arr2=[
{id:2,名字:“迈克”,城市:“纽约”},
{id:4,姓名:“史蒂夫”,城市:“洛杉矶”},
],
结果=arr2.reduce((a,o)=>(arr1.find(n=>n.completedBy==o.id)?.score | | 0)+a,0);

控制台日志(结果)您可以使用
reduce
find

const
arr1=[
{完成人:1,姓名:“约翰”,分数:60},
{完成人:2,姓名:“迈克”,分数:90},
{完成人:3,姓名:“鲍勃”,分数:50},
{完成人:4,姓名:“史蒂夫”,分数:40},
{完成人:5,名字:“瑞克”,分数:10},
{完成人:6,姓名:“亚伦”,分数:30},
],
arr2=[
{id:2,名字:“迈克”,城市:“纽约”},
{id:4,姓名:“史蒂夫”,城市:“洛杉矶”},
],
结果=arr2.reduce((a,o)=>(arr1.find(n=>n.completedBy==o.id)?.score | | 0)+a,0);

控制台日志(结果)欢迎使用堆栈溢出!请拿着(你得到了一个徽章!)通读,尤其是你在这里的最佳选择是做你的研究,关于SO的相关主题(有很多问题和答案涉及这个主题),然后试一试。如果你在做了更多的研究和搜索后陷入困境,无法摆脱困境,请发布一份你的尝试,并明确指出你陷入困境的地方。人们会很乐意帮忙的。你试过什么?另外,当你说arr2中存在的人,我想你只是通过名字来区分吗?我自己解决了这个问题,但不确定它的效率,因为我使用了嵌套循环:让total=0;for(let completedBy of arr1){for(let id of arr2){if(completedBy.completedBy==id.id){total+=completedBy.score}}}}console.log(total)如果要进行许多这样的调用,在每个调用中都使用相同版本的
arr1
,那么可能有一些方法使其更有效。但是,如果这是一次性的,并且每次您需要这样做时,两个数组都有不同的值,那么您的双循环解决方案就可以了。另外,
arr1
是否可以复制
completedBy
键?我们能不能在结尾加上{code>{completedBy:1,name:John,score:80}
?根据答案是“是”还是“否”,将有不同的解决方案。欢迎使用堆栈溢出!请拿着(你得到了一个徽章!)通读,尤其是你在这里的最佳选择是做你的研究,关于SO的相关主题(有很多问题和答案涉及这个主题),然后试一试。如果你在做了更多的研究和搜索后陷入困境,无法摆脱困境,请发布一份你的尝试,并明确指出你陷入困境的地方。人们会很乐意帮忙的。你试过什么?另外,当你说arr2中存在的人,我想你只是通过名字来区分吗?我自己解决了这个问题,但不确定它的效率,因为我使用了嵌套循环:让total=0;for(let completedBy of arr1){for(let id of arr2){if(completedBy.completedBy==id.id){total+=completedBy.score}}}}console.log(total)如果要进行许多这样的调用,在每个调用中都使用相同版本的
arr1
,那么可能有一些方法使其更有效。但是,如果这是一次性的,并且每次您需要这样做时,两个数组都有不同的值,那么您的双循环解决方案就可以了。另外,
arr1
是否可以复制
completedBy
键?我们能不能在结尾加上{code>{completedBy:1,name:John,score:80}
?根据答案是肯定还是否定,会有不同的解决方案。
arr1= [
{completedBy: 1, name: "John", score: 60},
{completedBy: 2, name: "Mike", score: 90},
{completedBy: 3, name: "Bob",  score: 50},
{completedBy: 4, name: "Steve", score: 40},
{completedBy: 5, name: "Rick", score: 10},
{completedBy: 6, name: "Aaron", score: 30},
]

arr2= [
{id: 2, name: "Mike", city: "NY"},
{id: 4, name: "Steve", city: "LA"},
]