簡體   English   中英

如何使用由對象和數組組成的 map 方法對數組進行索引

[英]How to index an array with map method consisting of objects and arrays

我有一個數組,它是用 JavaScript 中的 map 方法由另一個數組組成的:

response = initialResponse.data.Resurs.map((item)=>({
    KomRes:item.Kom,
    levels:
    [ 
    ...item.NumList.map((item)=>(
      {
      KomRes:item.Number,
      })),
    ...item.SerList.map((item,index3)=>({
      KomRes:"Serial: " + item.Ser,
      })),
  ]}));

所以,我有一個包含 1 個對象和一個對象數組的數組。 現在,我想添加索引,以便父對象及其所有子對象具有不同的索引。 一個例子是:

[
{
 KomRes:"abc"
 id:1 // ==> Here the id is different to the levels objects id-s
 levels:[{KomRes:"cde",id:2},{KomRes:"cdef",id:3}]
},
{
 KomRes:"dfr"
 id:4 // ==> Here the id is different to the levels objects id-s
 levels:[{KomRes:"dsf",id:5},{KomRes:"sgsd",id:6}]
},
{
 KomRes:"fgr"
 id:7 // ==> Here the id is different to the levels objects id-s
 levels:[{KomRes:"zizu",id:8},{KomRes:"hkl",id:9}]
},
]

如您所見,所有對象都有不同的 id(索引)。 我怎樣才能做到這一點?

我嘗試將索引添加到 map 方法,但不知道如何使用子 map 方法來實現:

response = initialResponse.data.Resurs.map((item,index)=>({
    KomRes:item.Kom,
    id:index,
    levels:
    [ 
    ...item.NumList.map((item)=>(
      {
      KomRes:item.Number,
      })),
    ...item.SerList.map((item,index3)=>({
      KomRes:"Serial: " + item.Ser,
      })),
  ]}));

不確定我是否理解您想要實現的目標,但是您可以在范圍之外聲明一個變量並將其遞增。 這給出了您期望的結果

 const response = [ { Kom: 'abc', NumList: [{ Number: "cde"}], SerList: [{ Ser: "cdef" }] }, { Kom: 'dfr', NumList: [{ Number: "dsf"}], SerList: [{ Ser: "sgsd"}] }, { Kom: 'fgr', NumList: [{ Number: "zizu"}], SerList: [{ Ser: "hkl"}] } ]; let lastId = 1; // index var to increment const result = response.map((item) => ({ KomRes: item.Kom, id: lastId++, levels: [ ...item.NumList.map((item) => ({ id: lastId++, KomRes: item.Number, }) ), ...item.SerList.map((item) => ({ id: lastId++, KomRes: "Serial: " + item.Ser, }) ), ] }) ); console.log(result)

在函數外部定義一個計數器變量,然后在每次迭代中為每個對象賦予id屬性,該屬性具有計數器變量的遞增值。 如果有任何子數組,它們將通過調用自身並傳入子數組來遞歸處理。

 const data=[{KomRes:"abc",id:null,levels:[{KomRes:"cde",id:null},{KomRes:"cdef",id:null}]},{KomRes:"ghi",id:null,levels:[{KomRes:"ijk",id:null},{KomRes:"ijkl",id:null}]},{KomRes:"mno",id:null,levels:[{KomRes:"omn",id:null},{KomRes:"omnp",id:null}]}]; let idx = 1; function flatIndex(array) { return array.map(obj => { if (!obj.id) { obj.id = idx++; } Object.values(obj).map(v => { if (Array.isArray(v)) { return flatIndex(v); } return obj; }); return obj; }); } console.log(flatIndex(data));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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