2017-08-08 41 views
1
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); 
} 

电流输出的Array.push(对象)在循环结束在JavaScript不推

[{ 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 }] 

我运行我的javascript in node.js -v 8.1.x服务器

在for循环结束时在控制台中打印所需的输出,但不在阵列中推

+2

切勿使用'为..in'循环遍历数组和'obj'是不是在你的代码中定义的? – adeneo

+0

是obj = {}已经宣布,但我可能知道为什么..in不可能这是我认为的正常迭代 – muthukumar

回答

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

+0

它帮助了我@Erazihel谢谢 – muthukumar

1

很可能您在for循环之外设置了obj,因此道具被覆盖,并且您多次推送相同的对象进入阵列。只需将obj声明移入循环。你可能只需要外部循环。

顺便说一句短得多:

let final = temparray1.map(
([b,c,d]) => ({b,c,d}) 
); 
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); 

希望这有助于!

+0

你得到什么错误?我可以给你一个实例,如果你想要它 – zenwraight

+0

@Jonasw在这里 - https://repl.it/KBxG ...试试吧,让我知道 – zenwraight

+0

上面的代码只推动最后一次array [{ b:8,c:9,d:10} {b:8,c:9,d:10} {b:8,c:9,d:10}] @zenwraight array.map函数是正确的apporach – muthukumar

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; }