[英]JavaScript nested map()
我有一個數組:
const array = [
{name: "abc", numbers:[1,2]},
{name: "def", numbers:[3,4]}
];
我想使用.map()
返回一個新數組,例如:
[
{name:"abc", number:1},
{name:"abc", number:2},
{name:"def", number:3},
{name:"def", number:4}
]
我應該怎么辦?
使用forEach
而不是map
會更高效。
正如@MohammadUsman 的好答案所示,必須先將 map 的map
平,然后才能獲得所需的結果。 使用forEach
(不返回任何內容),您可以直接將 append 到 output 數組:
const data = [ { name: "abc", numbers: [1,2] }, { name: "def", numbers: [3,4] } ]; var result = []; data.forEach( ({ numbers, ...rest }) => numbers.forEach( n => result.push(Object.assign({number: n}, rest ))) ); console.log(result);
您可以使用.map()
遍歷輸入數組,並使用Object.assign()
生成新的 object,最后使用.flat()
將數組展平以獲得所需的 Z78E6221F6393D1356681DB398F4。
const data = [ { name: "abc", numbers: [1,2] }, { name: "def", numbers: [3,4] } ]; const result = data.map( ({ numbers, ...rest }) => numbers.map(n => Object.assign({number: n}, rest )) ).flat(); console.log(result);
.as-console-wrapper { max-height: 100%;important: top; 0; }
您可以直接使用帶有新對象內部映射的Array#flatMap
並獲取對象數組。
const array = [{ name: "abc", numbers:[1, 2] }, { name: "def", numbers:[3, 4] }], result = array.flatMap(({ name, numbers }) => numbers.map(number => ({ name, number }))); console.log(result);
.as-console-wrapper { max-height: 100%;important: top; 0; }
如果flatmap
.reduce
在您的情況下它更快。 每個元素只進行一次迭代。
const array = [ { name: "abc", numbers: [1, 2] }, { name: "def", numbers: [3, 4] }, ]; const results = array.reduce((r, item) => { r = r.concat(item.numbers.map((number) => ({ name: item.name, number }))); return r; }, []); console.log(results)
如果您准備使用 jquery,這是一個簡單的解決方案...
const array = [
{name: "abc", numbers:[1,2]},
{name: "def", numbers:[3,4]}
];
var newArray = [];
$.each(array, function(k,v){
var strName = v.name;
$.each(v.numbers, function(key,value){
newArray.push({name: strName, number: value});
});
});
console.log(newArray);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.