簡體   English   中英

javascript中的對象數組轉換

[英]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#reduceArray#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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM