Как обратиться к элементам, а не к ключам в for?

Рейтинг: 0Ответов: 3Опубликовано: 16.05.2023

Дан объект. Нужно вывести сумму всех чисел которые начинаются на 1 и 2. Помогите исправить пожалуйста. Как обратиться к Элементам, а не к ключам в for?

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

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

//console.log(sum);

Ответы

▲ 0Принят
for (let elem in obj) {
    let elementValue = obj[elem];
    
    if (elementValue.toString()[0] === '1' || elementValue.toString()[0] === '2') { 
        sum += elementValue;
    }
}
▲ 0
  1. Переменная не может одновременно иметь значение 1 и 2. Поэтому условие

    elem[0] === '1' && elem[0] === '2'
    

    всегда будет ложным.

    Вместо этого нужно воспользоваться оператором ИЛИ

  2. в цикле for..in в переменную заносится ключ, а не значение. Чтобы получить значение, нужно взять его с помощью скобочной нотации

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

for (let elem in obj) {
  const value = obj[elem].toString();
  if (value[0] === '1' || value[0] === '2') {
    sum += obj[elem];
  }
}

console.log(sum);

▲ 0

Вариант с методами объектов и массивов...

let obj = {
  a: 10,
  b: 20,
  c: 30,
  d: 40,
  e: 50
};
const sum = Object.values(obj).reduce((sum, v) => {
  if (['1', '2'].indexOf(v.toString()[0]) != -1) sum += v
  return sum
}, 0)

console.log(sum);