[英]Combine several arrays into an array of objects in JavaScript
假設我有三個數組,描述了一些名稱,閱讀的書籍數量以及這些人[名字]中有多棒:
let names = ["Mary", "Joe", "Kenan"];
let numberOfBooks = [2, 1, 4];
let awesomenessLevel = ["pretty cool", "meh", "super-reader"];
我正在嘗試使用.reduce()
將它們組合在一起以創建一個包含每個數組中相關索引的對象數組,但我失敗了:
let people = [
{
name: "Mary",
noOfBooks: 2,
awesomeness: "pretty cool"
},
{
name: "Joe",
noOfBooks: 1,
awesomeness: "meh"
},
{
name: "Kenan",
noOfBooks: 4,
awesomeness: "super-reader"
}
]
我也減少了它:
let arrFinal = [];
names.reduce(function(all, item, index) {
arrFinal.push({
name: item,
noOfBooks: numberOfBooks[index],
awesomeness: awesomenessLevel[index]
})
}, []);
你可以用map
來做,像這樣:
let result = names.map( (v, i) => ({
name: names[i],
noOfBooks: numberOfBooks[i],
awesomenessLevel: awesomenessLevel[i]
}));
let names = ["Mary", "Joe", "Kenan"]; let numberOfBooks = [2, 1, 4]; let awesomenessLevel = ["pretty cool", "meh", "super-reader"]; let result = names.map( (v, i) => ({ name: names[i], noOfBooks: numberOfBooks[i], awesomenessLevel: awesomenessLevel[i] })); console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
在這種情況下, map
比reduce
更好,因為names數組中的元素數量(或其他兩個元素中的任何一個)與輸出中所需的元素數量相同。 在這種情況下,使用map
更自然。
使用map
在輸入數組和輸出數組之間創建1對1映射。
let people = names.map(function (e, i) {
return {name:e, noOfBooks:numberOfBooks[i],awesomeness: awesomenessLevel[i]};
});
let names = ["Mary", "Joe", "Kenan"]; let numberOfBooks = [2, 1, 4]; let awesomenessLevel = ["pretty cool", "meh", "super-reader"]; let people = names.map(function (e, i) { return {name:e, noOfBooks:numberOfBooks[i],awesomeness: awesomenessLevel[i]}; }); console.log(people);
您可以通過將所有數組組合到一個對象並使用鍵名作為數組中結果對象的屬性名來使用動態方法
let names = ["Mary", "Joe", "Kenan"], numberOfBooks = [2, 1, 4], awesomenessLevel = ["pretty cool", "meh", "super-reader"], object = { name: names, noOfBooks: numberOfBooks, awesomeness: awesomenessLevel }, result = Object.keys(object).reduce((r, k) => (object[k].forEach((a, i) => (r[i] = r[i] || {})[k] = a), r), []); console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.