[英]Array of objects transformation in javascript
我有一個對象數組:
let arr = [{start: 1, end: 5, group: [1, 3, 5]},
{start: 12, end: 17, group: [6, 20,]}]
我需要將此數組轉換為:
let arr_transformed = [{start: 1, end: 5, group: 1},
{start: 1, end: 5, group: 3},
{start: 1, end: 5, group: 5},
{start: 12, end: 17, group: 6},
{start: 12, end: 17, group: 20}
]
基本上我需要用組對象中的元素數復制對象值(開始,結束)並將單個組號放入其中。
我知道已經有很多答案了。 即使我以另一種簡單的方式提供答案,但不是最好的。
transformObject =(data)=>{ let cnt=0; let finalArray=[]; for(let i=0;i <data.length;i++){ let grouplen =data[i].group; for (let j = 0; j < grouplen.length; j++) { finalArray[cnt]={ start: data[i].start, end: data[i].end, group: grouplen[j] } cnt++; } } return finalArray; } let data = [{start: 1, end: 5, group: [1, 3, 5]}, {start: 12, end: 17, group: [6, 20,]}]; const result = transformObject(data); console.log("transformed Object:",result);
這么多方法……
這是一個單行,它減少了每個元素並將組映射到累加器數組中:
let arr = [{start: 1, end: 5, group: [1, 3, 5]},{start: 12, end: 17, group: [6, 20,]}] let r = arr.reduce((a, {start, end, group}) => a.concat(group.map(group => ({start, end, group}))), []) console.log(r)
您可以使用Array#reduce
和Array#forEach
來實現這一點。
這個想法是循環遍歷源數組,然后在每次迭代中循環遍歷group
鍵。 在每次內部迭代中,您將組合對象推送到最終結果。
let arr = [{start:1,end:5,group:[1,3,5]},{start:12,end:17,group:[6,20]}]; const transformed = arr.reduce((res, { start, end, group }) => { group.forEach(g => res.push({ start, end, group: g })); return res; }, []); console.log(transformed);
基本偽碼算法:
result = []
for object in arr {
for group in object.group {
result.push({object.start, object.end, group})
}
}
return result
迭代外循環中的數組,以及內循環中的組,將展平的對象推入結果數組對象。
let arr = [{start: 1, end: 5, group: [1, 3, 5]}, {start: 12, end: 17, group: [6, 20,]}] var arr_transformed = []; for(var i = 0; i < arr.length; i++) { var help = arr[i]['group']; delete arr[i]['group']; for(var j = 0; j < help.length; j++) { arr[i].group = help[j]; arr_transformed.push(arr[i]); } } console.log(arr_transformed);
運行此代碼並輸出
使用 forEach 和 map
let results = [];
arr.forEach( i => {
results = results.concat(i.group.map(group => {
return {
start: i.start,
end: i.end,
group
};
}))
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.