Перебор объекта до первого значения >= 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 шт):
Как вариант: преобразовываем 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))
const index = Object.values(currency).findIndex((c) => c.balance > 10)
вернёт или индекс первого элемента, удовлетворяющего условию, или -1 если не найдено.