【问题标题】:Find key inside a multiple level object在多级对象中查找键
【发布时间】:2019-05-07 18:58:24
【问题描述】:

我的后端构建这个对象:

{
  "cats": {
    "persian": {
      "19:51:38": {
        "name": "Perry"
      },
      "19:51:40": {
        "name": "Bob",
      }
      "19:51:39": {
        "name": "Saurus",
      },
    },
    "ragdoll": {
      "19:51:38": {
        "name": "Billy",
      },
      "19:51:43": {
        "name": "Billy",
      }
      "19:51:39": {
        "name": "Pepi",
      },
    },
    "norwegian": {
      "19:51:34": {
        "name": "Michonne",
      },
      "19:52:40": {
        "name": "Bull",
      },
      "19:52:42": {
        "name": "Oscar",
      }
    }
  },
  "dogs": {
    "labrador": {
      "19:51:35": {
        "name": "Alice",
      },
      "19:51:36": {
        "name": "Arthur",
      },
      "19:51:37": {
        "name": "Nemo",
      },
      "19:51:40": {
        "name": "Rose",
      }
    },
    "chihuahua": {
      "19:51:35": {
        "name": "Dory",
      },
      "19:51:36": {
        "name": "Bob",
      },
      "19:51:37": {
        "name": "Carl",
      },
      "19:51:38": {
        "name": "Bruce",
      },
      "19:51:39": {
        "name": "Moon",
      }
    },
    "pomeranian": {
      "19:51:35": {
        "name": "Elvis",
      },
      "19:51:36": {
        "name": "Dorian",
      },
      "19:51:37": {
        "name": "Amy",
      },
      "19:51:38": {
        "name": "Bill",
      }
    },
    "collie": {
      "19:51:35": {
        "name": "Thaurus",
      },
      "19:51:37": {
        "name": "Mine",
      },
      "19:51:40": {
        "name": "Wyng",
      }
    }
  }
}

我有一个搜索字段,允许您以 hh:mm:ss 这种格式插入日期小时。

现在我想返回与该日期关联的对象。我举个例子:如果用户搜索19:51:40,应用程序必须返回这个对象数组:

[{type: "cats", breed: "persian", name: "Bob"}, {type: "dogs", breed: "labrador", name: "Rose"}, , {type: "dogs", breed: "collie", name: "Wyng"}]

我想通过执行一个检查每个键小时的for循环来做到这一点。这是最快的方法吗?我不信……

在 lodash 中是否有一个方法调用 findKey 但我不能使用它,因为我不知道密钥的名称(与品种相关的那个),它会改变。 那么如何进行搜索呢?

【问题讨论】:

    标签: javascript object search find


    【解决方案1】:

    您可以使用嵌套的 for 循环来遍历键,并获得所需的结果:

    let obj = { "cats": { "persian": { "19:51:38": { "name": "Perry" }, "19:51:40": { "name": "Bob" }, "19:51:39": { "name": "Saurus" } }, "ragdoll": { "19:51:38": { "name": "Billy" }, "19:51:43": { "name": "Billy" }, "19:51:39": { "name": "Pepi" }, }, "norwegian": { "19:51:34": { "name": "Michonne" }, "19:52:40": { "name": "Bull" }, "19:52:42": { "name": "Oscar" } } }, "dogs": { "labrador": { "19:51:35": { "name": "Alice" }, "19:51:36": { "name": "Arthur" }, "19:51:37": { "name": "Nemo" }, "19:51:40": { "name": "Rose" } }, "chihuahua": { "19:51:35": { "name": "Dory" }, "19:51:36": { "name": "Bob" }, "19:51:37": { "name": "Carl" }, "19:51:38": { "name": "Bruce" }, "19:51:39": { "name": "Moon" } }, "pomeranian": { "19:51:35": { "name": "Elvis" }, "19:51:36": { "name": "Dorian" }, "19:51:37": { "name": "Amy" }, "19:51:38": { "name": "Bill" } }, "collie": { "19:51:35": { "name": "Thaurus"}, "19:51:37": { "name": "Mine" }, "19:51:40": { "name": "Wyng" } } } };
    
    function search(obj, t){
    let result = [];
      for(type in obj){
        for(breed in obj[type]){
          for(time in obj[type][breed]){
              if(time === t){
                result.push({type,breed, name : obj[type][breed][time].name})
              }
          }
        }
      }
      return result;
    }
    
    console.log(search(obj, "19:51:40"));

    【讨论】:

      猜你喜欢
      • 2018-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-21
      • 2018-12-19
      • 1970-01-01
      • 1970-01-01
      • 2014-08-21
      相关资源
      最近更新 更多