繁体   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