如果我有一个目标:
var dog= {
name: "Max",
age: 5,
sex: undefined,
details: {
color: "black",
breed: undefined
}
}我想用未定义的值获取属性的路径。我如何迭代所有属性,包括嵌套属性?
目前,对于没有嵌套属性的对象,我有一个普通的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对象的嵌套属性中获取这些未定义值的路径吗?我只想用香草javascript来做这个。提前谢谢。
发布于 2015-05-30 19:37:17
您可以像这样使用递归函数:
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”上使用联接来获取String:
console.log(path.join('\n'));发布于 2020-10-25 18:56:52
我们现在使用目标扫描进行这样的数据处理。每次都很难重新发明轮子。下面是它的工作原理
// 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' ].as-console-wrapper {max-height: 100% !important; top: 0}<script src="https://bundle.run/object-scan@13.8.0"></script>
免责声明:我是目标扫描的作者
https://stackoverflow.com/questions/30550376
复制相似问题