簡體   English   中英

結合多維數組,javascript

[英]Combine multidimensional array, javascript

我正在嘗試做一些簡單的事情,但它不起作用。

我有兩個陣列,有這樣的結構;

total ->
[0]-> [Day: 2016-04-19, Total: 23] 
[1]-> [Day: 2016-04-18, Total: 20]
failed ->
[0]-> [Day: 2016-04-19, Failed: 2] 
[1]-> [Day: 2016-04-18, Failed: 0]

我正在嘗試將“失敗”鍵添加到“總”數組的值,但它不會咬,所以輸出看起來像這樣;

arr ->
[0]-> [Day: 2016-04-19, Total: 23, Failed: 2]
[1]-> [Day: 2016-04-18, Total: 23, Failed: 0]
...

我已經分配給var sql1和“失敗”的“總數”我已經分配給var sql2然后我嘗試了各種函數和for循環,如:

for (var i = 0; i < sql1.length; i++) {
    sql1[i][2] = sql2[i][1];
}

然而sql1仍然是一樣的。 我究竟做錯了什么?

我也試過了

sql1[i].push(sql2[i][1]);

但這也不起作用。

您可以使用Array.prototype.concat()以這種方式連接多個數組:

var alpha = ['a', 'b', 'c'],
numeric = [1, 2, 3];

var alphaNumeric = alpha.concat(numeric);

console.log(alphaNumeric); // Result: ['a', 'b', 'c', 1, 2, 3]

但是,查看代碼時,您似乎正在使用Object搞亂數組。 您的代碼看起來應該更像這樣:

var total = [{
  Day: "2016-04-19",
  Total: 23
},
{
  Day: "2016-04-18",
  Total: 20
}];

var failed = [{
  Day: "2016-04-19",
  Total: 2
}, 
{
  Day: "2016-04-18",
  Total: 0
}]; 

console.log(total.concat(failed));

嘗試這個:

 var total = [ {Day: '2016-04-19', Total: 23}, {Day: '2016-04-18', Total: 20} ], failed = [ {Day: '2016-04-19', Failed: 2}, {Day: '2016-04-18', Failed: 0} ]; // clone total array var arr = total.slice().map(function(obj) { var result = {}; result.Day = obj.Day; result.Total = obj.Total; return result; }); for (var i=0; i<failed.length; ++i) { for (var j=0; j<arr.length; ++j) { if (failed[i].Day == arr[j].Day) { arr[j].Failed = failed[i].Failed; } } } document.body.innerHTML = '<pre>' + JSON.stringify(arr, true, 4) + '</pre>'; 

如果Days總是在數組中的相同位置,您可以使用以下方法簡化代碼:

for (var i=0; i<failed.length; ++i) {
  arr[i].Failed = failed[i].Failed;
}

您可以使用一些循環和一個哈希表來獲得正確的密鑰。

 var data = { total: [{ Day: '2016-04-19', Total: 23 }, { Day: '2016-04-18', Total: 20 }], failed: [{ Day: '2016-04-19', Failed: 2 }, { Day: '2016-04-18', Failed: 0 }] }, grouped = []; Object.keys(data).forEach(function (k) { data[k].forEach(function (a) { var key = { total: 'Total', failed: 'Failed' }[k]; if (!this[a.Day]) { this[a.Day] = { Day: a.Day, Total: 0, Failed: 0 }; grouped.push(this[a.Day]); } this[a.Day][key] += a[key]; }, this); }, Object.create(null)); document.write('<pre>' + JSON.stringify(grouped, 0, 4) + '</pre>'); 

暫無
暫無

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

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