如果我有一个物体:
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中尝试这个。提前谢谢。
答案 0 :(得分:1)
你可以像这样使用递归函数:
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'));
答案 1 :(得分:0)
我们现在使用object-scan进行这样的数据处理。每次都很难重新发明轮子。这是它的工作方式
const objectScan = require('object-scan');
const find = (data) => objectScan(['**'], {
joined: true,
filterFn: ({ value }) => value === undefined
})(data);
const dog = {
name: 'Max',
age: 5,
sex: undefined,
details: {
color: 'black',
breed: undefined
}
};
console.log(find(dog));
// => [ 'details.breed', 'sex' ]