结合多维数组,javascript

Combine multidimensional array, javascript

本文关键字:javascript 数组 结合      更新时间:2023-09-26

我正在尝试做一些简单的事情,但它不起作用。

我有两个结构如下的数组;

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]

我正在尝试将带有其值的"失败"键添加到"total"数组中,但它不会咬人,因此输出看起来像这样;

arr ->
[0]-> [Day: 2016-04-19, Total: 23, Failed: 2]
[1]-> [Day: 2016-04-18, Total: 23, Failed: 0]
...
我分配给 var

sql1 的"总计"和分配给 var sql2 的"失败",然后我尝试了各种函数和循环,例如:

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

然而,sql1保持不变。我做错了什么?

我也试过

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

但这也没有用。

您可以使用一些循环和哈希表来获取正确的键。

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>');

您可以使用 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;
}