简体   繁体   中英

array.push(object) not pushed at the end of the loop in javascript

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

current output

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

expected Out put :

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

i am running my javascript in node.js -v 8.1.x server

in the console at the end of the for loop it prints the required out put but not in the array push

Probably, you set obj outside the for loop, therefore the props are overwritten and you push the same object multiple times into the array. Simply move the obj declaration into the loop. And you probably just need the outer loop.

Btw much shorter:

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

Here is what you wanted

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

Hope this helps!

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

You could use Array#map and return an object with the wanted properties.

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

With ES6, you could map the inner arrays as well with an array for the keys with Object.assign and 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; } 

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM