Динамически получить «Ключ» с «Значение» в JavaScript - PullRequest
0 голосов
/ 17 мая 2018

для E.g

 let obj = {
    key1: ["A", "B", "C"],
    key2: ["D", "E"],
    key3: ["F"]
};

Если вход «A», он должен вернуть key1. Попробовал следующий код для другого объекта. Есть ли лучший способ для текущего сценария? `

function findKey(value) {
    var element = null;
    Object.keys(obj).forEach(function(key) {
        if (obj[key].value === value.toString()) {
            element = key;
            return;
        }
    });
    return element;
}

`

Ответы [ 3 ]

0 голосов
/ 17 мая 2018

Попробуйте следовать

let obj = {
    key1: ["A", "B", "C"],
    key2: ["D", "E"],
    key3: ["F"]
};
var text = "A";
var match = Object.entries(obj).find(([key, value]) => value.includes(text));

console.log(match[0]);

Для справки: Object.entries , Array.include и Array.find

0 голосов
/ 17 мая 2018

Использование Array.prototype.find и Array.prototype.includes.

let obj = {
  key1: ["A", "B", "C"],
  key2: ["D", "E"],
  key3: ["F"]
};

function findKey(value) {
  return Object.keys(obj).find(key => obj[key].includes(value));
}

console.log(findKey("A"));

Другой вариант - реорганизовать структуру данных в Map для более быстрого доступа:

let obj = {
  key1: ["A", "B", "C"],
  key2: ["D", "E"],
  key3: ["F"]
};

let map = new Map();

Object.keys(obj).forEach(key => {
  obj[key].forEach(value => {
    map.set(value, key);
  });
});

console.log(map.get("A"));
0 голосов
/ 17 мая 2018

Попробуйте использовать Object.keys, который возвращает массив всех ключей, а затем используйте find, чтобы получить первый соответствующий элемент

let input = "A";
let result = Object.keys(obj).find(key => obj[key].indexOf(input) !== -1);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...