有如下多层嵌套的对象:
var obj = {
l1: {
l2: {
l3: "Hello World"
}
}
}
方法1:
var r = (((obj || {}).l1 || {}).l2 || {}).l3;
或
var r = obj.l1 && obj.l1.l2 && obj.l1.l2.l3
方法2:
let delve = (obj, key) => (key.split('.').map(p => (obj = obj && obj[p])), obj);
console.log(delve(obj, 'l1.l2.l3')); // Hello World
方法3:
function checkNested(obj, key, ...rest) {
if (obj === undefined || obj === null) return false;
if (rest.length == 0 && obj.hasOwnProperty(key)) return true;
return checkNested(obj[key], ...rest);
}
console.log(checkNested(obj, 'l1', 'l2', 'l3')); // true
方法4:
function validChain(obj, ...keys) {
return keys.reduce((obj, key) => (obj || {})[key], obj) !== undefined
}
console.log(validChain(obj, 'l1', 'l2', 'l3')); // true
方法5:
function objHasKeys(obj, keys) {
var next = keys.shift();
return obj[next] && (! keys.length || objHasKeys(obj[next], keys));
}
如果有更好的方式,欢迎补充?。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。