基于另一个数组对数组中的值求和



我目前正在尝试根据当前数组中存在的另一个数组的Id来求和对象数组中的一些值。假设我有这个数组

const queryArray = [ "1" , "2" ]

这是我想要求和的数组Id匹配的属性值

const services = [
{
Id: "1",
services: "Early Check-In",
fees: "7500"
},
{
Id: "2",
services: "Late Checkout",
fees: "7500"
},
{
Id: "3",
services: "Airport Chauffeur",
fees: "25000"
}
]

所以我想根据queryArray中可用的Id获得services数组中fees属性值的总和。在本例中

[ "1" , "2" ]

应该返回

15000

如果我决定在

下面使用
[ "1" , "3" ]

应该返回

32500

[ "1", "2" , "3"]

应该返回

40000

我是javascript的新手,所以我甚至不能想到任何可能的解决方案或采取的步骤。

当然,filter是您需要的服务->map服务于它的价值->reduce将结果列表添加元素为单个数字:

const services = [
{
Id: "1",
services: "Early Check-In",
fees: "7500"
},
{
Id: "2",
services: "Late Checkout",
fees: "7500"
},
{
Id: "3",
services: "Airport Chauffeur",
fees: "25000"
}
]
const ids = ["1" , "2"]
console.log(
services
.filter(({Id}) => ids.includes(Id))
.map(({fees}) => parseFloat(fees))
.reduce((acc, fees) => acc + fees, 0)

)

检查id是否包含在reducer内部的id数组中:

const services = [
{
Id: "1",
services: "Early Check-In",
fees: "7500"
},
{
Id: "2",
services: "Late Checkout",
fees: "7500"
},
{
Id: "3",
services: "Airport Chauffeur",
fees: "25000"
}
]
const queryArray = [ "1" , "2" ]
const res = services.reduce((a,b) => queryArray.includes(b.Id) ? a += +b.fees : a, 0)
console.log(res)

您也可以使用reduce,并且对于每个条目检查当前值的Id是否在queryArray中。如果是,则返回当前总额加上当前费用。

设置0作为起始值

const services = [{
Id: "1",
services: "Early Check-In",
fees: "7500"
},
{
Id: "2",
services: "Late Checkout",
fees: "7500"
},
{
Id: "3",
services: "Airport Chauffeur",
fees: "25000"
}
]
const queryArray = ["1", "2"]
let res = services.reduce(
(total, curr) => queryArray.includes(curr.Id) ? total + parseInt(curr.fees, 10) : total,
0
);
console.log(res);

最新更新