JavaScript / 设置增量索引从0开始

JavaScript / Set Increment index from 0

我在设置始终唯一索引时遇到问题,递增一个。

我有一个这样的数组。

const parentArr = [
  {
    name: 'first parent array',
    childArray: [
      {
        name: '1 / first child'
      },
      {
        name: '1 / second child'
      }
    ]
  },
    {
    name: 'second parent array',
    childArray: [
      {
        name: '2 / first child array'
      },
      {
        name: '2 / second child array'
      }
    ]
  }
]

我期待这样的结果:

const expectedResult = [
  {
    name: 'first parrent array',
    additionalInfo: [
      {
        index: 0,
        name: '1 - first child'
      },
      {
        index: 1,
        name: '1 - second child'
      }
    ]
  },
   {
    name: 'second parrent array',
    additionalInfo: [
      {
        index: 2,
        name: '2 -first child array'
      },
      {
        index: 3,
        name: '2- second child array'
      }
    ]
  }
]

我想在 additionalInfo 中为从 0 开始的每个项目创建索引。

我这样试过,但是我得到了错误的索引号

  return parentArr.map((parent) => {
    return {
      name: parent.name,
      additionalData: parent.childArray.map((child, index) => ({
        name: child.name
        index: index   // I'M STUCK ON THIS LINE
      })),
    };
  });

您必须独立于循环管理子项的索引。那么这个呢?

let i = 0;

return parentArr.map((parent) => {
  return {
    name: parent.name,
    additionalData: parent.childArray.map((child) => ({
      name: child.name
      index: i++
    })),
  };
});

索引计数应该存在于地图之外,因为这将在每次迭代时重置它。

您可以将此行为抽象为可重复使用的方法,如下所示。

const parentArr = [
  {
    name: 'first parent array',
    childArray: [
      {
        name: '1 / first child'
      },
      {
        name: '1 / second child'
      }
    ]
  },
    {
    name: 'second parent array',
    childArray: [
      {
        name: '2 / first child array'
      },
      {
        name: '2 / second child array'
      }
    ]
  }
];


const transformArray = root => {
  let i = 0;
  return root.map(({ name, childArray }) => ({
    name,
    additionalData: childArray.map(({ name }) => ({
      index: i++,
      name
    }))
  }));
};

console.log(transformArray(parentArr));