结合多维数组,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]
我正在尝试将带有其值的"失败"键添加到"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;
}
相关文章:
- Javascript-如何读取json文件中的列并将其保存在Javascript数组中
- JavaScript数组排序(函数)用于对表行进行排序,而不是排序
- 将Javascript数组发送到控制器ASP.NET MVC
- JavaScript数组包含一个值
- 将JavaScript数组传递给函数
- javascript:数组循环
- 将数据存储在javascript数组中以供进一步使用
- 在Javascript数组中查找绝对最大值
- JavaScript数组优化以提高性能
- 在javascript数组中分散数字
- 如何发送分配列表<字符串>到JavaScript数组或可枚举对象
- Javascript数组动态
- javascript数组元素是否知道其封闭数组
- 将 JSON 数组解析为 JavaScript 数组
- 将Transform和Instance Variable转换为对象的JavaScript数组
- 使用Web Html表单创建Javascript数组
- 从重复的javascript数组结果集中只获取一行
- 如何为Javascript数组()的使用准备PHP变量
- Javascript数组和函数
- 为DataTables aoColumnDefs创建JavaScript数组(JSON格式)