use*_*512 7 javascript arrays object
我得到了这个路径数组:
const path = ["a", "b", "c", "d"]
和类似的对象:
let obj = { "a": { "b": { "c": { "d": 10, "e": 20 } } } }
我想删除那个,obj["a"]["b"]["c"]["d"]
所以我obj
会
{ "a": { "b": { "c": { "e": 20 } } } }
我尝试做一些path.forEach
循环,将其附加,但是找不到我想要附加的适当方式,因此我可以访问obj
正确的位置。
谢谢您的帮助。
Nic*_*ons 12
您可以递归地执行此操作,然后delete
在基本情况下使用来删除最终的键值对:
const path = ["a", "b", "c", "d"]
const obj = { "a": { "b": { "c": { "d": 10, "e": 20 } } } };
const remove_from_path = (obj, [prop, ...rest]) =>
!rest.length ? delete obj[prop] : remove_from_path(obj[prop], rest);
remove_from_path(obj, path);
console.log(obj);
Run Code Online (Sandbox Code Playgroud)
您可以遍历path
数组并在每次迭代中访问obj
对象的该属性。在最后一次迭代中,不要输入最后一个属性,而是将其删除。
var path = ["a", "b", "c", "d"];
var obj = { "a": { "b": { "c": { "d": 10, "e": 20 } } } };
path.reduce(function(result, key, index) {
if (index === path.length - 1) delete result[key];
else return result[key];
}, obj);
console.log(obj);
Run Code Online (Sandbox Code Playgroud)
您可以保存最后一个键并将对象减少到最终对象。
const
remove = (object, [...keys]) => {
const last = keys.pop();
delete keys.reduce((o, k) => o[k] || {}, object)[last];
},
path = ["a", "b", "c", "d"],
obj = { a: { b: { c: { d: 10, e: 20 } } } };
remove(obj, path);
console.log(obj);
Run Code Online (Sandbox Code Playgroud)