我已经查看了类似问题的一些答案,但是,我想以不同的方式提出我的问题。
假设我们有一个类似 "level1.level2.level3. ..." 的字符串,它指示名为 Obj 的对象中的嵌套属性。
关键是我们可能不知道这个字符串中存在多少个嵌套属性。例如,它可能是“level1.level2”或“level1.level2.level3.level4”。
现在,我想编写一个函数,将 Obj 和属性字符串作为输入,简单地告诉我们对象中是否存在这样的嵌套属性(假设 true或 false 作为输出)。
<小时/>更新: 感谢@Silvinus,我找到了经过细微修改的解决方案:
private checkNestedProperty(obj, props) {
var splitted = props.split('.');
var temp = obj;
for (var index in splitted) {
if (temp[splitted[index]] === 'undefined' || !temp[splitted[index]]) return false;
temp = temp[splitted[index]];
}
return true;
}
最佳答案
您可以使用Array#every()
及其 thisArg
,通过迭代键并检查它是否在给定对象中。
var fn = function (o, props) {
return props.split('.').every(k => k in o && (o = o[k], true));
}
console.log(fn({}, "toto.tata")); // false
console.log(fn({ toto: { tata: 17 } }, "toto.tata")); // true
console.log(fn({ toto: { tata: { tutu: 17 } } }, "toto.foo.tata")); // false
console.log(fn({ toto: { tata: false } }, "toto.tata")); // true
关于javascript - 检查对象 javascript 中是否存在嵌套属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37019746/