Найти ключ объекта со значением внутри массива? - PullRequest
0 голосов
/ 07 марта 2019

Я знаю, что некоторые люди могут найти это очень легко. Но, похоже, начать очень сложно. Если бы у меня был массив, я бы легко справился с фильтром.

Допустим, у меня есть этот объект

    const mapData = {family: ["gender", "ethnics"], house: ["wardNumber","livingType"]}

Теперь, если у меня есть atribute = "gender" Как мне найти ключ family.

если у меня есть atribute = "livingType" Тогда мне нужно House;

Есть ли здесь какой-нибудь профи Javascript?

Заранее спасибо

Ответы [ 3 ]

3 голосов
/ 07 марта 2019

Вы можете получить ключи и найти с помощью включений.

Методы:

  • Object.keys для получения собственных ключей от объекта,

  • Array#find для поиска предмета с обратным вызовом,

  • Array#includes, это проверяет, существует ли элемент в массиве.

const
    mapData = { family: ["gender", "ethnics"], house: ["wardNumber", "livingType"] },
    attribute = "gender",
    key = Object
        .keys(mapData)
        .find(k => mapData[k].includes(attribute));

console.log(key);   
1 голос
/ 08 марта 2019

Вы можете сделать это с Object.entries(), Array.find(), Array.includes() и Array.shift().

Если значение не найдено, будет возвращено undefined.

const data = {family: ["gender", "ethnics"], house: ["wardNumber","livingType"]}

const getKey = val =>
  (Object.entries(data).find(([k, v]) => v.includes(val)) || []).shift();
 
console.log(getKey('gender'));
console.log(getKey('livingType'));
console.log(getKey('non-existing-value'));
1 голос
/ 07 марта 2019

Вы можете использовать Object.keys() и filter()

const mapData = {family: ["gender", "ethnics"], house: ["wardNumber","livingType"]}

const findKey = (obj,attr) => Object.keys(obj).filter(k => obj[k].includes(attr))[0]

console.log(findKey(mapData,"gender"))
console.log(findKey(mapData,"livingType"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...