javascript - 如何使用 typescript 获取 Array<Model> 中的产品

标签 javascript typescript

我有一个数组,例如:

{
    "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/

相关文章:

javascript - ES6 中的 block 作用域

javascript - 将模板文字与 Lodash _.template() 一起使用

javascript - 尝试更改 IE 中 iFrame 的背景颜色

Angular 2 : Set placeholder for select

Facebook React 的 typescript

javascript - Webstorm JavaScript 和 Typescript zen 编码

angular - 有没有办法限制对组件及其模板的方法/变量访问?

javascript - 如何使用 requirejs 和 Backbone.Marionette 同步/组织模块

javascript - 在不使用插件的情况下用 jQuery 中的图像替换复选框的简单方法

Angular 4 : Routing to a route doesn't work