@karolina1029

Не могу найти ошибку в условии, в консоли выводит 0, что делать?

let obj = {a: 10, b: 20, c: 30, d: 40, e: 50};
let sum = 0;

for (let elem in obj) {
	if (elem[0] === '1' && elem[0] === '2') {
		sum += +elem;
	}
}

console.log(sum);
  • Вопрос задан
  • 488 просмотров
Решения вопроса 1
RAX7
@RAX7
let obj = { a: 10, b: 20, c: 30, d: 40, e: 50 };
let sum = 0;

for (const num of Object.values(obj)) {
  const s = num.toString()[0];
  if (s === "1" || s === "2") {
    sum += num;
  }
}

console.log(sum);
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@KateSin
в условии
for (let elem in obj) {
вы перебираете ключи в obj, после чего пытаетесь найти нулевой (?) элемент в ключе и проверить условие (т.е. буквально проверяете "а" === "1"). Логичней было проверять obj[elem] на соответствие условию.
Ответ написан
Комментировать
sergiks
@sergiks Куратор тега JavaScript
♬♬
Пара ошибок:
  1. for .. in перебирает имена свойств объекта ('a', 'b', 'c', ...)
    а тут требуются значения (10, 20, 30, ...) – значения перебирает for .. of
  2. значения — числа. Чтобы забрать первую букву (цифру) нужна строка. Поэтому надо каждое значение сначала сделать строкой. Например, методом toString():
    const num = 10; // число
    num.toString() // результат "10" – строка текста
Поправьте эти два момента и всё наладится.

Можно и в одну нечитабельную строку:
Object.values(obj).reduce((acc, c) => acc + c.toString().match(/^[12]/), 0) // 2
но здесь используется тяжёлый механизм регулярных выражений, хотя вполне можно без него; и неочевидное приведение типа Boolean к Number ради краткой записи.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы