Как проверить, повторяется ли значение массива карты с другим ключом в JavaScript? - PullRequest
0 голосов
/ 27 ноября 2018

У меня есть карта, имеющая "String" в качестве ключа и "Array" в качестве значения.Теперь моя проблема в том, как я должен проверить, присутствует ли элемент массива в другом значении «Массив»?т.е. "Массив" другого ключа на карте.

Например:

var map = {
"KeyA" : [123,111,100],
"KeyB" : [147,123,789]
}

как я могу проверить, что элемент массива 123 присутствует с двумя разными ключами, т.е. KeyA и Key B

Спасибо, Абхи

Ответы [ 2 ]

0 голосов
/ 27 ноября 2018

Мы можем добиться этого, используя Object.keys () и .filter , затем мы возвращаем ключи, если значение присутствует в этом массиве.

Iрешили использовать indexOf () вместо includes () , поскольку это не поддерживается в Internet Explorer без полифила.

const map = {
    "KeyA" : [123,111,100],
    "KeyB" : [147,123,789]
}

function checkForValue(array, value) {
    return Object.keys(array)
        .filter(key => (array[key].indexOf(value) !== -1) ? key : null);  
}

console.log(checkForValue(map, 123)); // [ 'KeyA', 'KeyB']
0 голосов
/ 27 ноября 2018

Вы можете создать универсальный метод и проверить значение в массивах, используя every():

let map = {
  "KeyA" : [123,111,100],
  "KeyB" : [147,123,789],
  "KeyC" : [147,148,789]
};

let checker = (obj, keys, val) => {
  return keys.every(k => obj[k].includes(val));
}

console.log(checker(map, ["KeyA", "KeyB"], 123));

В случае, если вы хотите передать массив значений:

let map = {
  "KeyA" : [123,111,100],
  "KeyB" : [147,123,789,111],
  "KeyC" : [147,148,789]
};

let checker = (obj, keys, val) => {
  return keys.every(k => val.every(v => obj[k].includes(v)));
}

console.log(checker(map, ["KeyA", "KeyB"], [123, 111]));
...