首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >导航多维对象以匹配仅具有ES5、多个Object.key和.map的键

导航多维对象以匹配仅具有ES5、多个Object.key和.map的键
EN

Stack Overflow用户
提问于 2020-02-12 22:07:36
回答 2查看 20关注 0票数 0

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

我要询问的对象如下所示:

代码语言:javascript
运行
复制
const myObj = {
    blue: {
      three: {
          star: { 
              foo: "this object is what I want",
              foo2: "this object is what I want"
          }
      }
    } 
}

正如您所看到的,这有三个层次。除了star之外,我不知道任何键可能是什么。我知道我想返回这个键的值,如果它可用的话。

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

代码语言:javascript
运行
复制
  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];
        }
      });
    });
  });

有没有其他东西可以用来遍历这个对象,直到我按下匹配的键?然后返回该键的值?

EN

回答 2

Stack Overflow用户

发布于 2020-02-12 22:39:23

代码语言:javascript
运行
复制
const myObj = {
    blue: {
      three: {
          star: { 
              foo: "this object is what I want",
              foo2: "this object is what I want"
          }
      }
    } 
}

您可以遍历所有属性,并检查该属性是否是您想要的。然后你就可以从它们或任何你喜欢的东西中构建数组。:)

代码语言:javascript
运行
复制
const seeker = function (object) {

  for (let property in object)
  {
      if (property === 'star')
      {
          console.log(property, object[property])
      }

      if (object[property] instanceof Object)
        seeker(object[property])
  }
}
票数 1
EN

Stack Overflow用户

发布于 2020-02-12 22:32:25

也许你可以试试这个:

代码语言:javascript
运行
复制
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), []);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60190201

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档