我有一个数组,例如:
{
"10-08": [
{
"Items": [
{
"RoomNum": 2
}
],
"Dates": {
"From": "2019-10-03T16:00:00.000Z",
"To": "2019-10-08T16:00:00.000Z"
}
}
],
"10-09":[
{
"Items": [
{
"RoomNum": 3
}
],
"Dates": {
"From": "2019-10-07T16:00:00.000Z",
"To": "2019-10-11T16:00:00.000Z"
}
}
],
differenceInDays
来自 date-fns.js
现在,我想要得到
(items.RoomNum * differenceInDays(item.TravelDates.To,item.TravelDates.From))
+(items.RoomNum * differenceInDays(item.TravelDates.To,item.TravelDates.From))...
and so on.
例如: 我想要得到:
2*5 +3*4
我该怎么办?
最佳答案
这是使用 reduce 的绝佳机会该功能是 Javascript 数组的函数。此函数将数组减少为 1 个值。
语法如下:
const array = [1, 2, 3, 4, 5];
const sum = array.reduce(function(sumSoFar, currentElement) {
return sumSoFar + currentElement;
}, 0 /* initial value of sumSoFar */);
console.log(sum); // 15
因此,在您的情况下,由于您已经将项目分组在一起,因此代码涉及更多一些,但仍然不困难。最终价格可以这样计算:
Object.keys(groups).reduce(function(sum, group) {
return sum + differenceInDays(groups[group][0].Dates.To, groups[group][0].Dates.From) * groups[group][0].Items.reduce(function(subSum, item) {
return subSum + item.RoomNum;
}, 0);
}, 0);
这是因为乘法的分配属性,即a * (b + c) = a * b + a * c
- 我们可以将房间数量相加,然后乘以房间数量天,它都相当于您发布的公式并产生更干净/更短的代码。
关于javascript - 如何使用 typescript 获取 Array<Model> 中的产品,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58915688/