导航多维对象以仅使用ES5,多个Object.key和.map来匹配键

问题描述 投票:0回答:1

我正在尝试查询多维对象,并根据对我可用的变量返回对象的一部分。我无权访问ES6的许多对象和数组方法。

我要询问的对象看起来像:

const myObj = {
    blue: {
      three: {
          star: { 
              foo: "this object is what I want",
              foo2: "this object is what I want"
          }
      }
    } 
}

如您所见,这分为三层。我不知道star以外的其他键是什么。我知道我想返回此键的值(如果有)。

为了返回键star的对象,我目前正在使用Object.keys().map() 3次,虽然可以,但是我觉得必须有一个更简单的解决方案。以下是我所拥有的:

  return Object.keys(myObj).map(function(colour) {
    Object.keys(myObj[colour]).map(function(number) {
      Object.keys(myObj[colour][number]).map(function(shape){
        if (myObj[colour][number][shape] === "star") {
          return myObj[colour][number][shape];
        }
      });
    });
  });

还有其他东西可用来逐步浏览该对象,直到我按下匹配的键?然后返回该键的值?

javascript arrays object ecmascript-5
1个回答
0
投票

也许您可以尝试以下方法:

function recursive(myObj) {
    const result = [];
    for (const key in myObj) {
        if (key === 'star') {
            result.push(myObj[key]);
        }
        if (typeof myObj[key] === 'object') {
            result.push(recursive(myObj[key]).reduce((acc, val) => acc.concat(val), []));
        }
    }
    return result.reduce((acc, val) => acc.concat(val), []);
}
© www.soinside.com 2019 - 2024. All rights reserved.