簡體   English   中英

遍歷包含對象的數組的數組,並在JavaScript / Angular中更新數組

[英]Loop through an array of arrays containing object, and update the array in JavaScript/Angular

我正在嘗試遍歷對象為[[{},{},{}],[{},{},{}]]數組數組,並創建一個新的數組,該數組基本上“總計”了這些數組。 我對如何實現這一點感到茫然。

我的數據如下所示:

[
  [{
    "2017-01-05": 607
  }, {
    "2017-01-06": 430
  }, {
    "2017-01-07": 357
  }, {
    "2017-01-08": 277
  }],
  [{
    "2017-01-09": 607
  }, {
    "2017-01-10": 430
  }, {
    "2017-01-11": 357
  }, {
    "2017-01-12": 277
  }]
],

我想每周“計數”和“標簽”,每周總計。 例:

newArray: [{"Week 1": 1075}, {"Week 2": 1590}]

我知道我可能應該使用forEach循環,但是這樣會有點粗略:

dateArray.forEach( function (arrayWeek)
{
  // push and name etc. functionality
});

非常感謝您的協助和指導。

我將使用map函數並減少map內的每個星期:

 var days = [ [{"2017-01-05":607}, {"2017-01-06":430}, {"2017-01-07":357}, {"2017-01-08":277}], [{"2017-01-09":607}, {"2017-01-10":430}, {"2017-01-11":357}, {"2017-01-12":277}] ]; function aggregator(memo, day) { for (var i in day) { memo += day[i]; } return memo; } // Original version from the question var weeks = days.map(function(week, index) { var obj = {}; obj['Week ' + (index + 1)] = week.reduce(aggregator, 0); return obj; }); console.log(weeks); // Follow up version from question in the comments var weeks2 = days.map(function(week, index) { return { name: 'week ' + (index + 1), total: week.reduce(aggregator, 0) }; }); console.log(weeks2); 

您可以嘗試這樣。

 var data=[[{"2017-01-05":607},{"2017-01-06":430},{"2017-01-07":357},{"2017-01-08":277}],[{"2017-01-09":407},{"2017-01-10":430},{"2017-01-11":357},{"2017-01-12":277}]]; var result = data.reduce(function(p, c, i) { var total = c.reduce(function(total, obj) { for (var k in obj) { total += obj[k]; } return total; }, 0); // Format object in any format you want var tmp = {}; tmp.name = "Week " + (i+1) tmp.total = total; // Push formatted object in array p.push(tmp) return p; }, []) console.log(result) 

注意,我建議您使用一個對象而不是對象數組。 這樣做的好處是您將不需要循環輸出即可獲得價值。 您可以直接獲得result['week'+index]

 var data=[[{"2017-01-05":607},{"2017-01-06":430},{"2017-01-07":357},{"2017-01-08":277}],[{"2017-01-09":407},{"2017-01-10":430},{"2017-01-11":357},{"2017-01-12":277}]]; var result = data.reduce(function(p, c, i) { var total = c.reduce(function(total, obj) { for (var k in obj) { total += obj[k]; } return total; }, 0); p["week" + (i + 1)] = total; return p; }, {}) console.log(result) 

可變的周應該擁有您想要的...我假設周數是一年中的實際周數,而不是數組中的某些索引。 我也不會使用相同的數據結構,而是會進行調整,以使您無需更改結構。

var arr = [
    [{
        "2017-01-05": 607
    }, {
        "2017-01-06": 430
    }, {
        "2017-01-07": 357
    }, {
        "2017-01-08": 277
    }],
    [{
        "2017-01-09": 607
    }, {
        "2017-01-10": 430
    }, {
        "2017-01-11": 357
    }, {
        "2017-01-12": 277
    }]
]

function week(d) {
    // taken from http://stackoverflow.com/questions/6117814/get-week-of-year-in-javascript-like-in-php
    d.setHours(0, 0, 0, 0);
    d.setDate(d.getDate() + 4 - (d.getDay() || 7));
    return Math.ceil((((d - new Date(d.getFullYear(), 0, 1)) / 8.64e7) + 1) / 7);
}

var weeks = {};
for (var x in arr) {
    var subarr = arr[x]
    for (var y in subarr) {
        var obj = subarr[y];
        for (var when in obj) {
            var d = new Date(when);
            var which_week = "Week " + week(d);
            if (which_week in weeks) {
                weeks[which_week] += obj[when];
            } else {
                weeks[which_week] = obj[when];
            }
        }
    }
}

沒有forEach

var arrs = [
  [{
    "2017-01-05": 607
  }, {
    "2017-01-06": 430
  }, {
    "2017-01-07": 357
  }, {
    "2017-01-08": 277
  }],
  [{
    "2017-01-09": 607
  }, {
    "2017-01-10": 430
  }, {
    "2017-01-11": 357
  }, {
    "2017-01-12": 277
  }]
];

function loop1(arr, i, r){
    r = (r ? r : 0) + arr[i][Object.keys(arr[i])[0]];
    return ++i == arr.length ? r : loop1(arr, i, r);
}
function loop2(arrs, i, r){
    i = i ? i : 0;
    r = r ? r : {};
    r['Week ' + (i + 1)] = loop1(arrs[i], 0);
    return ++i == arrs.length ? r : loop2(arrs, i, r);
}

var newArr = loop2(arrs);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM