正如标题所说,如果对象在 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);
}
}
答案 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。 我认为这应该可以解决问题。