Найти ключ внутри многоуровневого объекта - PullRequest
0 голосов
/ 06 декабря 2018

мой бэкэнд построит этот объект:

{
  "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, но я не могу использовать его, потому что я не знаю название ключа (тот, который относится к породе),меняется.Так как мне выполнить поиск?

1 Ответ

0 голосов
/ 06 декабря 2018

Вы можете использовать вложенные циклы 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"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...