2

我想按顺序标识我的树数组中的所有对象。为此,我需要迭代所有数组对象和对象的子、孙等,并将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 }));

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

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

4

1 回答 1

4

您可以采用深度优先搜索算法并添加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; }

于 2020-01-14T08:50:26.900 回答