javascript - 遍历嵌套的javascript对象以识别空值属性

标签 javascript nested

如果我有一个对象:

var dog= {
  name: "Max",
  age: 5,
  sex: undefined,
  details: {
    color: "black",
    breed: undefined
  }
}

我想获取具有未定义值的属性的路径。我如何遍历所有属性,包括嵌套属性?

目前,我有一个没有嵌套属性的对象的 vanilla js 方法:

function getUndefinedPaths(o, name) {
  var paths = [];
  for (var prop in o) {
    if (o[prop] === undefined) {
        paths += name + "." + prop + "\n";
    }
  }
  return paths;
}

// getUndefinedPaths(dog, "dog") only returns "dog.sex" and not "dog.details.breed" which is also undefined.

我卡住了。有人可以帮助解决如何在 js 对象的嵌套属性中获取那些未定义值的路径吗?我只是在 vanilla javascript 中尝试这个。提前致谢。

最佳答案

你可以像这样使用递归函数:

function getPath(obj, path) {

    var props = [];    

    for(var key in obj) {

        if(obj[key] === undefined) {
            props.push(path + '.' + key);
        }

        if(obj[key] instanceof Object) {
            props.push.apply(props, getPath( obj[key], path + '.' + key ));
        }

    }

    return props;
}


var path = getPath(dog, 'dog');

这将返回一个 Array 路径到 undefined 属性

如有必要,您可以对生成的“Array”使用 join 来获取 String:

console.log(path.join('\n'));

关于javascript - 遍历嵌套的javascript对象以识别空值属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30550376/

相关文章:

dictionary - Ansible:更改嵌套变量的默认值

json - 如何为 Angular 6 中的下拉功能迭代多嵌套 JSON 对象?

perl - 只在本地调用的嵌套 Perl 子程序有什么问题吗?

jquery - 渲染 JQuery Datatables 中嵌套 json 对象中的列值

Javascript 多个 Div 具有相同的类名但不同的 id。单击其中任何一个时始终返回最后一个 div

javascript - 如何将值推送到作为 mongodb 中对象的属性的数组

javascript - 向 Sequelize FindOne 返回的对象添加属性

javascript - knockout : changing options in select list without clearing value in view-model

javascript - 拆分字符串数组以查找和选中复选框

javascript - 视差,作为主页横幅