Поиск в массиве Js по двум переменным - PullRequest
0 голосов
/ 02 мая 2019

Учитывая пример массива

array =
[
 ["name1", ["blue", "yellow", "pink"], "id"],
 ["name2", ["green", "orange"], "id"],
 ["nameN", ["purple", "black", "white", "red"], "id"],
];

Возможно ли (в ванильных) Js эффективно получить name и id из тех, которые соответствуют двум заданным цветам (скажем, red иblack)

Ответы [ 2 ]

1 голос
/ 02 мая 2019

Вы можете использовать метод Array#find для получения определенного элемента на основе условия и метод Array#includes для проверки того, что массив содержит определенное значение.

let array = [
  ["name1", ["blue", "yellow", "pink"], "id"],
  ["name2", ["green", "orange"], "id"],
  ["nameN", ["purple", "black", "white", "red"], "id"],
];

let color = 'orange';

let [name, colors, id] = array.find(a => a[1].includes(color));

console.log(name, id)
0 голосов
/ 02 мая 2019

вы можете использовать уменьшить также:

const arr = [
  ['name1', ['blue', 'yellow', 'pink'], 'id'],
  ['name2', ['green', 'orange'], 'id'],
  ['nameN', ['purple', 'black', 'white', 'red'], 'id'],
];

const getNameAndIdByColor = (color) =>
  arr.reduce(
    (acc, [name, colors, id]) => (colors.includes(color) ? { ...acc, [color]: { name, id } } : acc),
    {},
  );

console.log('getNameAndIdByColor:', getNameAndIdByColor('red'));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...