如果具有相同的 id,则添加具有相同值的属性

时间:2021-01-16 16:18:58

标签: javascript reactjs

正如标题所说,如果对象在 reactjs 中具有相同的 id,我想向它添加一个 newPop: n 我知道这很容易,但它让我很难

const [data, setData] = useState([
{
  id: 1,
  name: 'john doe'
},
{
  id: 2,
  name: 'jane doe'
},
{
  id: 2,
  name: 'jane doe'
},
{
  id: 3,
  name: 'neil armstrong'
},
])

将会

  const [data, setData] = useState([
{
  id: 1,
  name: 'john doe'
  newProp: 0,
},
{
  id: 2,
  name: 'jane doe'
  newProp: 1
},
{
  id: 2,
  name: 'jane doe'
  newProp: 1
},
{
  id: 3,
  name: 'neil armstrong'
  newProp: 2
},
])

我的代码,如你所见,我卡住了。

 for (var i = 0; i < data.length - 1; i++) {
  if (data[i].id != data[i + 1].id) {
    const newData = {
      ...data[i],
      newProp: i,
    };
    setData(newData);
  }
}

2 个答案:

答案 0 :(得分:1)

您可以将 name 的当前值与 name 的先前值进行比较并跟踪您的索引。

const data = [{ id: 1, name: 'john doe' }, { id: 2, name: 'jane doe' }, { id: 2, name: 'jane doe' }, { id: 3, name: 'neil armstrong' }, ];
let index = 0;
const updatedData = data.map((o,i,a) => {
  if(i && o.name !== a[i-1].name) {
    index++;
  }
  return {...o, newProp: index};
});
console.log(updatedData);

答案 1 :(得分:0)

你可以试试吗

const newArr = [];
 for (var i = 0; i < data.length - 1; i++) {
  if (data[i].id != data[i + 1].id) {
    const newData = {
      ...data[i],
      newProp: i,
    };
    newArr.push(newData);
  }
}
setData(newArr);

这会将您的数组循环到一个新数组,并将索引添加为 newProp。 我认为这应该可以解决问题。