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