2016-11-17 145 views
1

考虑下面的代码:如何使用.map从对象数组创建数组数组?

var data = []; 
for (let i = 0; i <2; i++) { 
    data.push({ 
    "a": "1", 
    "b": "2" 
    }); 
} 

console.log(data); 

data.map((el) => { 
    var row = Object.keys(el).map(key => el[key]); 
    console.log(row); 
    return row; 
}); 

console.log(data); 

为什么这不会产生一个数组的数组,如:

[ 
    ["1", "2"], 
    ["1", "2"] 
] 

这里是一个CodePen:http://codepen.io/24ma13wg/pen/MbbQZr

+6

map方法不改变数组,它只是返回一个新的数组。 你缺少的是使用地图的返回值.. –

回答

-1

确实如此,近。您需要储存Array#map的结果。

var data = [], result; 
 
for (let i = 0; i <2; i++) { 
 
    data.push({ 
 
    "a": "1", 
 
    "b": "2" 
 
    }); 
 
} 
 

 
result = data.map(el => Object.keys(el).map(key => el[key])); 
 
// ^^^^^ missing assignment 
 

 
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

-1

如果你想更新数组,你应该做手工:

var data = []; 
 
for (let i = 0; i <2; i++) { 
 
    data.push({ 
 
    "a": 2*i, 
 
    "b": 2*i+1 
 
    }); 
 
} 
 
console.log(data); 
 
data.forEach((el,i,arr) => { 
 
    arr[i] = Object.keys(el).map(key => el[key]); 
 
}); 
 
console.log(data);

还要考虑使用ES2017的Object.values

data = data.map(Object.values); 
+0

你有没有做过相同的经历,在晚上是更多的downvoters? –

+0

@NinaScholz不确定。早上我不回答。但是,我在晚上也没有收到很多降价 – Oriol