3 回答
TA贡献1797条经验 获得超6个赞
您可以创建一个通用方法,该方法基于属性名称数组访问元素,该属性名称数组被解释为通过属性的路径:
function getValue(data, path) {
var i, len = path.length;
for (i = 0; typeof data === 'object' && i < len; ++i) {
data = data[path[i]];
}
return data;
}
然后,您可以使用以下命令调用它:
var a = getValue(b, ["c", "d"]);
TA贡献1804条经验 获得超7个赞
标准方法:
var a = b && b.c && b.c.d && b.c.d.e;
速度非常快,但不太优雅(尤其是具有较长的属性名称)。
使用函数遍历JavaScipt对象属性既不高效也不优雅。
尝试以下方法:
try { var a = b.c.d.e; } catch(e){}
如果您确定a以前没有使用过,或者
try { var a = b.c.d.e; } catch(e){ a = undefined; }
如果您之前已经分配过。
这可能比第一种选择更快。
TA贡献1820条经验 获得超2个赞
获取的价值path的object。如果解析的值为undefined,defaultValue则返回。
在ES6中,我们可以从Object下面的类似代码片段中获取嵌套属性。
const myObject = {
a: {
b: {
c: {
d: 'test'
}
}
},
c: {
d: 'Test 2'
}
},
isObject = obj => obj && typeof obj === 'object',
hasKey = (obj, key) => key in obj;
function nestedObj(obj, property, callback) {
return property.split('.').reduce((item, key) => {
if (isObject(item) && hasKey(item, key)) {
return item[key];
}
return typeof callback != undefined ? callback : undefined;
}, obj);
}
console.log(nestedObj(myObject, 'a.b.c.d')); //return test
console.log(nestedObj(myObject, 'a.b.c.d.e')); //return undefined
console.log(nestedObj(myObject, 'c.d')); //return Test 2
console.log(nestedObj(myObject, 'd.d', false)); //return false
console.log(nestedObj(myObject, 'a.b')); //return {"c": {"d": "test"}}
添加回答
举报