Задать вопрос
@sema-fedotov

Как реализовать поиск значения в объекте?

Есть код следующего характера:
let fruits = {}

fruits['apple'] = {
    id: 0,
    color: green
}

fruits['orange'] = {
     id: 1,
    color: orange
}


Можно как-то среди всех фруктов найти определенный цвет? Например оранжевый, и вывести его id?
  • Вопрос задан
  • 115 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
Чей id хотим найти: const color = 'orange';.

Ищем:

const { id = null } = Object.values(fruits).find(n => n.color === color) || {};

// или

let id = null;
for (const k in fruits) {
  if (fruits.hasOwnProperty(k) && fruits[k].color === color) {
    id = fruits[k].id;
    break;
  }
}

UPD. Вынесено из комментариев:

А если у меня несколько оранжевых фруктов, как поступить?

Ну, доставайте всё, что есть.

Сразу достаём массив id для какого-то конкретного цвета:

const ids = Object.values(fruits).reduce((acc, n) => (
  n.color === color && acc.push(n.id),
  acc
), []);

Или, сначала группируем данные, а затем можно извлекать массивы id для различных цветов:

function group(data, key, val = n => n) {
  const getKey = key instanceof Function ? key : n => n[key];
  const getVal = val instanceof Function ? val : n => n[val];
  const result = {};

  for (const n of data) {
    const k = getKey(n);
    (result[k] = result[k] || []).push(getVal(n));
  }

  return result;
}

const idsByColor = group(Object.values(fruits), 'color', 'id');

const orangeIds = idsByColor.orange || [];
const greenIds = idsByColor.green || [];
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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