繁体   English   中英

如何在 Js 中向所有树数组的对象添加一个项目?

[英]How to Add an item to All Tree Array's Objects in Js?

我想按顺序 id 树数组中的所有对象。 为此,我需要迭代所有数组对象和对象的子对象、孙子对象等,并将rowId插入到每个对象中。

我拥有的;

rows={[
  {
    car: 'Audi A4',
    city: 'Las Vegas',
    items: null,
    name: 'Sandra',
    sex: 'Female'
  },
  {
    car: 'Chevrolet Cruze',
    city: 'Tokyo',
    items: [
      {
        car: 'BMW 750',
        city: 'London',
        items: [
          {
            car: 'Toyota Corolla',
            city: 'Chicago',
            name: 'David',
            sex: 'Male'
          },
        ],
        name: 'Robert',
        sex: 'Male'
      }
    ],
    name: 'Sharon',
    sex: 'Female'
  }
]}

我所期待的;

rows={[
  {
    car: 'Audi A4',
    city: 'Las Vegas',
    items: null,
    name: 'Sandra',
    sex: 'Female',
    rowId: 1
  },
  {
    car: 'Chevrolet Cruze',
    city: 'Tokyo',
    items: [
      {
        car: 'BMW 750',
        city: 'London',
        items: [
          {
            car: 'Toyota Corolla',
            city: 'Chicago',
            name: 'David',
            sex: 'Male',
            rowId: 2
          },
        ],
        name: 'Robert',
        sex: 'Male',
        rowId: 3
      }
    ],
    name: 'Sharon',
    sex: 'Female',
    rowId: 4
  }
]}

当没有内部对象时,我可以像这样进行迭代;

rows.map((row, index) => ({ ...row, rowId: index }));

还尝试了一些递归方法,但实际上没有一个有效,也没有在网上找到有用的东西。

寻找可以指导我完成此操作的天才开发人员。 提前致谢。

您可以采用深度优先搜索算法并将id添加到每个对象。

 const addId = (data, id) => { const iter = array => array.forEach(o => { if (o.items) iter(o.items); // search first o.id = id++; // add later }); iter(data); }; var rows = [{ car: 'Audi A4', city: 'Las Vegas', items: null, name: 'Sandra', sex: 'Female' }, { car: 'Chevrolet Cruze', city: 'Tokyo', items: [{ car: 'BMW 750', city: 'London', items: [{ car: 'Toyota Corolla', city: 'Chicago', name: 'David', sex: 'Male' },], name: 'Robert', sex: 'Male' }], name: 'Sharon', sex: 'Female' }]; addId(rows, 1); console.log(rows);
 .as-console-wrapper { max-height: 100% !important; top: 0; }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM