按变量访问嵌套对象键

时间:2017-12-27 15:57:01

标签: javascript ecmascript-6

我们说我有一系列像这样的对象:

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属性,无论它嵌套在对象中有多深?

在现实生活中不幸的是,我在这个简化的例子中有更多嵌套的东西。

1 个答案:

答案 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
);