例如,我有一個具有某些屬性的狀態物件
function (location){ obj = { kids : { eyal : 21, noam :15 } pets : { dog : 5, cat :2 } } }
現在我想改變 eyal 值
location = "kids.eyal"
如果我在做
setobj((prevobj) => { ...prevobj, [location] : 22 })
它在 obj Kids.eyal = 22 中創建新引數而不是將 kids 中的 eyal 更改為 22 我該如何解決?
uj5u.com熱心網友回復:
邏輯。
- 拆分位置
. - 遍歷位置陣列,除了最后一個節點。
- 用所需的值替換作為所需目標的最后一個節點物件。
作業小提琴
const obj = { kids : { eyal : 21, noam :15 }, pets : { dog : 5, cat :2 } };
const targetLocation = "kids.eyal";
const pathArray = targetLocation.split('.');
const lastNode = pathArray[pathArray.length - 1];
let node = obj;
pathArray.forEach((path, index) => node = index === pathArray.length - 1 ? node : node [path]);
node[lastNode] = 22;
console.log(obj);
uj5u.com熱心網友回復:
我想你想要這樣的東西:
oldObj = { kids : { eyal : 21, noam :15 } }
function updateOneKidAge(obj,theKid)
{
const [kidName, newAge] = Object.entries(theKid)[0]
return { kids : {...obj.kids, [kidName]: newAge}};
}
console.log(updateOneKidAge(oldObj, {eyal: 22}))
uj5u.com熱心網友回復:
您不能在 [] 括號內使用 obj.property 格式。您必須分別發送這兩個屬性。就像是
location = ["kids","eyal"]
然后在那里使用它:
setobj((prevobj) => { ...prevobj, [location[0]][location[1]] : 22 })
希望它能解決問題
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/369919.html
標籤:javascript 反应 目的
