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
服务器
打印所需的输出,但不打印在数组push
中答案 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.assign
和spread 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; }