Перебор объекта до первого значения >= 10

Прошу помощи с перебором объекта. Моих знаний не хватает. Есть объект, вида:

const currency = {
    'RUB': {id: 1, balance: 0, available: 0},
    'EUR': {id: 2, balance: 120, available: 50},
    'USD': {id: 3, balance: 50, available: 15},
}

Необходимо сделать перебор этого объекта таким образом, чтобы определить первый элемент, у которого значение balane >= 10. То есть скрипт должен войти в объект, проверить RUB, если его balance не >= 10, то проверить EUR и т.д. Если какой-то из элементов содержит balance >= 10, то сразу сделать return true; Если таких не нашлось, то не делать ничего.


Ответы (2 шт):

Автор решения: Eugene Kuznetsov

Как вариант: преобразовываем Object в Map, итерируем полученный Map, если элемент удовлетворяет выбрасываем исключение. В полученную функцию в аргументах передаем, объект, который нужно проверить и число c которым сравниваем поле balance.

const currency = {
  'RUB': {
    id: 1,
    balance: 0,
    available: 0
  },
  'EUR': {
    id: 2,
    balance: 120,
    available: 50
  },
  'USD': {
    id: 3,
    balance: 50,
    available: 15
  },
};

function exists(arr = {}, condition) {
  const iterable = new Map(Object.entries(arr));
  let result = false;
  let BreakException = {};
  try {
    iterable.forEach((value, key) => {
      if (value.balance >= condition) {
        throw BreakException;
      }
    })
  } catch (e) {
    if (e === BreakException) {
      result = true;
    }

  }
  return result;
};

console.log(exists(currency, 10));

Либо с помощью for... in (Цикл for...in проходит только по перечисляемым свойствам)

const currency = {
  'RUB': {
    id: 1,
    balance: 0,
    available: 0
  },
  'EUR': {
    id: 2,
    balance: 120,
    available: 50
  },
  'USD': {
    id: 3,
    balance: 50,
    available: 15
  },
};

function balanceIsMoreThan(argObject, condidtion) {
  let result = false;
  for (let index in argObject) {
    if (currency[index].balance >= condidtion) {
      result = true;
      break;
    }
  }
  return result;
}
console.log(balanceIsMoreThan(currency, 10))

Третий вариант с помощью Object.values() и some(), как подсказал Денис Степанов в комментариях к вопросу:

const currency = {
  'RUB': {
    id: 1,
    balance: 0,
    available: 0
  },
  'EUR': {
    id: 2,
    balance: 120,
    available: 50
  },
  'USD': {
    id: 3,
    balance: 50,
    available: 15
  },
};

function balanceIsMoreThan(argObj = {}, condition) {
  const valuesArr = Object.values(argObj);
  const even = (element) => element.balance >= condition;
  return valuesArr.some(even);
};
console.log(balanceIsMoreThan(currency, 10))

→ Ссылка
Автор решения: tsypa

const index = Object.values(currency).findIndex((c) => c.balance > 10)

вернёт или индекс первого элемента, удовлетворяющего условию, или -1 если не найдено.

→ Ссылка