javascript reach element by a path array

拥有回忆 提交于 2020-12-05 05:43:13

问题


I got this path array:

const path = ["a", "b", "c", "d"]

and an object like:

let obj = { "a": { "b": { "c": { "d": 10, "e": 20 } } } }

and I would like to delete that obj["a"]["b"]["c"]["d"] so my obj will be

{ "a": { "b": { "c": { "e": 20 } } } }

I've tried to do some path.forEach looping, appending it but couldn't find a proper way which I appended it as I wish to, so I could access obj to the right place.


回答1:


You could do this recursively and then use delete to remove the final key-value pair in your base-case:

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);



回答2:


You can loop through the path array and in each iteration access that property of the obj object. In the last iteration, instead of entering the last property, delete it.

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);



回答3:


You could save the last key and reduce the objects to the final object.

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);



回答4:


let obj = { "a": { "b": { "c": { "d": 10, "e": 20 } } } };
const path = ["a", "b", "c", "d"];

const recursiveLookup = (obj) => {
  path.forEach((el) => {
    if(typeof obj[el] === 'object'){
      recursiveLookup(obj[el])
    } else {
      delete obj[el];
    }
  });
};
recursiveLookup(obj);

console.log(obj)


来源:https://stackoverflow.com/questions/57428074/javascript-reach-element-by-a-path-array

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!