2016-11-17 146 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