我有一個物件陣列,它的結構如下:
let array1 = [{}]
array1.push({
title: 'myTitle1',
extendedProps: {
field1: 'hello'
}
})
現在我正在嘗試做一個axios.get請求并使用回傳的資料將一個新元素添加到array1. 我成功地從 axios 請求中檢索資料,但是,當我嘗試推送資料時:res.data[i]._doc.userIsReg,如下所示:
array1.push({
...array1,
extendedProps: {
...array1.extendedProps,
userIsReg: true
}
})
如您所見,我正在使用該spread功能將當前資料包含array1到陣列中,然后嘗試將新元素附加userIsReg到物件extendedProps中。現在,我假設這會起作用,但是,當我這樣做時,它會在陣列中創建新的物件條目,并包括當前陣列內部的所有內容(來自擴展功能),并userIsReg在其中添加新條目。
所以為了更清楚,我從這個開始:
[{
title: 'myTitle1',
extendedProps: {
field1: 'hello'
}
},
{
title: 'myTitle2',
extendedProps: {
field1: 'hello2'
}
},
]
然后一旦我array1.push使用傳播功能,我得到這個:
[{
title: 'myTitle1',
extendedProps: {
field1: 'hello'
}
},
{
title: 'myTitle2',
extendedProps: {
field1: 'hello2'
}
},
{
title: 'myTitle1',
extendedProps: {
field1: 'hello',
userIsReg: true
}
},
{
title: 'myTitle2',
extendedProps: {
field1: 'hello2',
userIsReg: true
}
},
]
所以基本上將所有內容加倍,而不是將其附加到當前陣列。我將如何解決這個問題?
uj5u.com熱心網友回復:
得到回復后,您可以執行以下操作
array1.map(element => ({...element, userIsReg: true}))
它將 userIsReg 標志添加到陣列的每個物件。
現在你想要它在里面extendedProps,你可以使用以下
array1.map(element => (
{...element,
extendedProps: {
...element.extendedProps,
userIsReg: true
}}))
uj5u.com熱心網友回復:
當你在 let 型別中定義你的陣列時,你可以這樣做:
array1 = [...array1.filter(item=> item.title === selected_item.title ),{
...selected_item,userIsReg: true
}]
我所做的只是洗掉前一個元素并添加一個具有新值的新元素,如果您想保留陣列的順序,您可以對其進行排序
uj5u.com熱心網友回復:
試試這種方式:
let array1 = [{
title: 'myTitle1',
extendedProps: {
field1: 'hello'
}
},
{
title: 'myTitle2',
extendedProps: {
field1: 'hello2'
}
}];
array1.forEach(obj => {
obj.extendedProps['userIsReg'] = true // this value is coming from API
});
console.log(array1);
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/484827.html
標籤:javascript 数组 反应 目的
