Задать вопрос
@Alex10214

Как выбрать объекты в массиве по индексу другого массива?

Приветствую, у меня есть условные массив объектов:
const arr = [
  {
    ticker: 'SPY',
    strategy: 'OLD',
    broker: 'OOH'
  },
  {
    ticker: 'SPY',
    strategy: 'LOG',
    broker: 'FOR'
  },
  {
    ticker: 'HG',
    strategy: 'KIP',
    broker: 'LOOP'
  }
]

и есть массив:
const arr2 = ['OLD', 'LOG']
подскажите как мне перебрать arr (по strategy) на основе данных arr2
  • Вопрос задан
  • 117 просмотров
Подписаться 1 Простой 1 комментарий
Решения вопроса 2
sergiks
@sergiks Куратор тега JavaScript
♬♬
arr.filter((item) => arr2.includes(item.strategy))

/*
[
  {
    "ticker": "SPY",
    "strategy": "OLD",
    "broker": "OOH"
  },
  {
    "ticker": "SPY",
    "strategy": "LOG",
    "broker": "FOR"
  }
]
*/
Ответ написан
0xD34F
@0xD34F Куратор тега JavaScript
Какое свойство проверяем: const key = 'strategy';.

Достаём объекты:

const result = arr.filter(function(n) {
  return this.has(n[key]);
}, new Set(arr2));

или

const result = arr2.flatMap(((values, n) => values[n] ?? []).bind(
  null,
  arr.reduce((acc, n) => ((acc[n[key]] ??= []).push(n), acc), {})
));

или

const result = [];
for (const n of arr) {
  for (const m of arr2) {
    if (m === n[key]) {
      result.push(n);
      break;
    }
  }
}

или

const result = [];
for (let i = 0; i < arr.length; i++) {
  if (~arr2.indexOf(arr[i][key])) {
    result[result.length] = arr[i];
  }
}

или

const result = (function get(i, n = arr[i]) {
  return n
    ? [].concat(arr2.includes(n[key]) ? n : [], get(-~i))
    : [];
})(0);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы