我们说我有一系列像这样的对象:
const myArray = [{
name: "FirstObj",
things: {
firstThing: "something",
secondThing: "anotherThing"
}
}, {
name: "OtherObjWithVeryLongName",
things: {
firstThing: "something",
secondThing: "anotherThing"
}
}]
我需要访问对象属性的.length
属性才能找到
数组中特定键中最长字符串的字符数,如下所示:
myFun(prop) {
const lengths = myArray.map(object => object[prop].length);
const longest = Math.max.apply(null, lengths);
return longest;
}
上面的代码在我尝试myFun("name")
时有效,它返回.name
中对象中最长myArray
属性的字符数,但是当我尝试访问像myFun("things.firstThing")
这样的嵌套对象显然不起作用(正如我实际预期的那样)。
是否有一种简单的方法可以重新组织myFun(prop)
,这样我可以访问.length
属性,无论它嵌套在对象中有多深?
在现实生活中不幸的是,我在这个简化的例子中有更多嵌套的东西。
答案 0 :(得分:0)
您可以使用reduce来启用嵌套密钥:
myFun(...props) {
const lengths = myArray.map(object => props.reduce((obj,key) => obj[key], object).length);
const longest = Math.max(...lengths);
return longest;
}
然后可以用作
myFun("some","nested","prop");
改进版本:
const myFun (...props) => myArray.reduce(
(max, object) => Math.max(max, props.reduce((o,k) => o[k], object)),
0
);