在javascript中没有在循环结束时推送array.push(object)

时间:2017-08-08 16:05:25

标签: javascript arrays multidimensional-array

var temparray1 = [[1,3,4],[5,6,7],[8,9,10]];
var final = [];
var obj = {};
for(var temp in temparray1){
    for(var test in temparray1[temp]){
        obj.b = temparray1[temp][0];
        obj.c = temparray1[temp][1];
        obj.d = temparray1[temp][2];
    }
    console.log(obj);
    final.push(obj);
}

当前输出

[{ b: 8, c: 9, d: 10 }
{ b: 8, c: 9, d: 10 }
{ b: 8, c: 9, d: 10 }]

预期结果

[{ b: 1, c: 3, d: 4 }
{ b: 5, c: 6, d: 7 }
{ b: 8, c: 9, d: 10 }]

我在node.js -v 8.1.x服务器

中运行我的javascript 在for循环结束时控制台中的

打印所需的输出,但不打印在数组push

4 个答案:

答案 0 :(得分:1)

可能你在for循环之外设置了obj,因此道具被覆盖了,你将同一个对象多次推入数组。只需将obj声明移动到循环中即可。你可能只需要外循环。

Btw更短:

let final = temparray1.map(
 ([b,c,d]) => ({b,c,d})
);

答案 1 :(得分:1)

这是你想要的

var temparray1 = [[1,3,4],[5,6,7],[8,9,10]];
var final = [];
for(var temp in temparray1){
   var obj = {};
   obj['b'] = temparray1[temp][0];
   obj['c'] = temparray1[temp][1];
   obj['d'] = temparray1[temp][2];
   final.push(obj);
}
console.log(final);

希望这有帮助!

答案 2 :(得分:1)



var temparray = [[1, 3, 4], [5, 6, 7], [8, 9, 10]];
const final = temparray.map(a => ({ b: a[0], c: a[1], d: a[2] }));

console.log(final);




答案 3 :(得分:1)

您可以使用Array#map并返回包含所需属性的对象。

var array = [[1, 3, 4], [5, 6, 7], [8, 9, 10]],
    result = array.map(function (a) {
        return { b: a[0], c: a[1], d: a[2] };
    });
    
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

使用ES6,您可以使用Object.assignspread syntax ...将内部数组与键的数组进行映射。

var array = [[1, 3, 4], [5, 6, 7], [8, 9, 10]],
    keys = ['b', 'c', 'd'],
    result = array.map(a => Object.assign(...keys.map((k, i) => ({ [k]: a[i] }))));
    
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }