我的物件是這樣的:
let items =
[
{
"creationTimeStamp": "2022-05-31T17:04:28.000Z",
"modifiedTimeStamp": "2022-05-31T17:04:28.000Z",
"locations": [
{
"id": "5ao",
"name": "Store1"
}
],
"typeId": "Lead"
}
]
我正在嘗試將以下物件推送到locations
屬性中:
{
"id": "9a0",
"name": "Store2"
}
我試過做
items1 = [];
for (var i = 0; i < items.length; i ) {
items1.id = "9a0";
items1.name = "Store2";
//9 is some static index value added
Object.assign({9 : items1}, items[i].locations);
}
如果我console(Object.assign({9 : items1}, items[i].locations));
可以在其中看到 2 個陣列,但我的 itemslocations
屬性仍然相同。
我的期望如下:
[
{
"creationTimeStamp": "2022-05-31T17:04:28.000Z",
"modifiedTimeStamp": "2022-05-31T17:04:28.000Z",
"locations": [
{
"id": "5ao",
"name": "Store1"
},
{
"id": "9a0",
"name": "Store2"
}
],
"typeId": "Lead"
}
]
我也嘗試使用items[i].locations.push(item1)
,但后來得到:
TypeError:無法添加屬性 9,物件不可擴展
我還嘗試將一個新陣列分配給items[i].locations
,但隨后得到:
TypeError:無法分配給物件“#”的只讀屬性“位置”
我該怎么做才能得到想要的結果?
uj5u.com熱心網友回復:
您似乎期望給定的第二個引數Object.assign
會發生突變。但它是第一個變異的論點。這意味著你.locations
的沒有變異。此外,在評論中,您指出locations
不能擴展并且該屬性是只讀的。
所以這意味著你需要一個完整的新物件。
其他一些評論:
不要初始化
items1
為陣列,因為它應該是一個普通物件。用或宣告一個變數
const
,并避免隱式全域宣告。let
var
在回圈內宣告
items1
物件更安全,因此您每次都創建一個新物件并且不要改變同一個物件。對于您的示例代碼,它沒有任何區別,但它可能導致意外行為。由于您不需要
i
任何其他東西items[i]
,并且您實際上需要一個完整的新結構,因此請.map
改用。
所以:
items = items.map(item => {
let obj = {
id: "9a0",
name: "Store2"
};
return {...item, locations: item.locations.concat(obj) };
});
uj5u.com熱心網友回復:
我總是從函式和默認不變性的角度來思考,所以我的方法可能看起來像這樣,addLocationToAll
構建在一個更簡單的addLocation
. 代碼相當簡單:
const addLocation = (newLoc) => ({locations, ...rest}) =>
({...rest, locations: locations .concat (newLoc)})
const addLocationToAll = (newLoc) => (items) =>
items .map (addLocation (newLoc))
const items = [{creationTimeStamp: "2022-05-31T17:04:28.000Z", modifiedTimeStamp: "2022-05-31T17:04:28.000Z", locations: [{id: "5ao", name: "Store1"}], typeId:"Lead"}]
const newLoc = {id: "9a0", name: "Store2"}
console .log (addLocationToAll (newLoc) (items))
.as-console-wrapper {max-height: 100% !important; top: 0}
uj5u.com熱心網友回復:
items
是一個陣列,所以它必須訪問陣列的第一個位置,這將是建議的物件。有了這個,您將從提議的物件中提取location
屬性,因為這是一個陣列,您可以使用 push 函式插入新物件
items[0]
// ->
// {
// creationTimeStamp: '2022-05-31T17:04:28.000Z',
// modifiedTimeStamp: '2022-05-31T17:04:28.000Z',
// locations: [ { id: '5ao', name: 'Store1' } ],
// typeId: 'Lead'
// }
我試試這個:
items[0].locations.push({"id": "9a0", "name": "Store2" })
現在:
items[0]
//->
// {
// creationTimeStamp: '2022-05-31T17:04:28.000Z',
// modifiedTimeStamp: '2022-05-31T17:04:28.000Z',
// locations: [ { id: '5ao', name: 'Store1' }, { id: '9a0', name: 'Store2' }],
// typeId: 'Lead'
// }
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/485394.html