gpt4 book ai didi

javascript - 从嵌套的对象数组中删除对象

转载 作者:行者123 更新时间:2023-11-28 17:15:37 26 4
gpt4 key购买 nike

我有一个小函数(在我的 Angular 7 应用程序中),它使用 JavaScript reduce(),并在嵌套的对象数组中定位一个对象。然后我可以继续即时更新某些属性。

现在,除了这个查找逻辑之外,我还想在嵌套数组中插入/删除一个对象。

问题是:一旦我找到了我的对象,我可以推送()和/或删除对象吗?

const input={UID:2,GUID:"",LocationName:"USA",ParentLocation:null,subs:[{UID:42,GUID:"",LocationName:"New Jersey",Description:"",subs:[{UID:3,GUID:"",LocationName:"Essex County",ParentLocation:null,"subs":[{UID:4,LocationName:"Newark",ParentLocation:3,"subs":[{"UID":49,"GUID":"","LocationName":"Doctor Smith's Office","LocationType":{"UID":2,"LocationTypeName":"Practice","Description":"other location"},"subs":[{"HostID":38,"HostName":"Ocean Host",}]}]}]}]}]};

const findUIDObj = (uid, parent) => {
const { UID, subs } = parent;
if (UID === uid) {
const { subs, ...rest } = parent;
return rest;
}
if (subs) return subs.reduce((found, child) => found || findUIDObj(uid, child), null);
};
console.log(findUIDObj(49, input));

var obj = findUIDObj(49, input);
delete obj;

例如,在我的 Angular 7 应用程序中,如果我尝试删除找到的对象,它会提示:

例如/

var obj = findUIDObj(49, input);
delete obj;

'delete' cannot be called on an identifier in strict mode.

最佳答案

简要查看您的代码,我发现您正在使用 const 标识符来声明您的数据集合。我们只对不会改变的静态数据使用 const,这就是它的目的。所以,首先,这似乎是问题所在。要测试它,请将其更改为 let。现在,对于数据管理方法,不变性值得您考虑,原因有很多,但即无论更改现有对象还是接收新对象,Angular 都会重新渲染整个对象。您可以查找 Immutable JavaScript 以了解更多信息。在许多情况下,创建不可变数据管理是通过库完成的,您可以自己完成。基本上,创建一个名为 copy( data ) 的函数,或者其他函数,以便您传入原始对象,但您会得到它的副本作为返回,而不会引用原始对象。这样人们就不会意外地改变原始对象。为此,您可以在复制函数内执行此操作:return JSON.parse(JSON.stringify( data )) ;

这里可能遇到的唯一问题是深层嵌套对象,或者具有循环引用的对象可能会导致问题。我有一个压倒一切的 stringify 方法来在我编写的小库中管理它。

关于javascript - 从嵌套的对象数组中删除对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53527481/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com