Пожалуйста, помогите разобраться в проблеме? Не могу получить результат – общая сумма

const objectWithNumbers = {
  a: 10,
  b: 20,
  c: "string",
  d: 12,
};

function sumObjectValues(obj) {
  Object.values(obj).reduce((sum, key) => {
    if (typeof obj[key] === "number") {
      sum += obj[key];
    }
return sum
  }, 0);
}

const result = sumObjectValues(objectWithNumbers);
console.log(result);
//42should be 

Пытался использовать сокращение и не смог получить результат

1
Seona16 16 Сен 2023 в 20:30
Вы делали какую-нибудь отладку? Попробуйте console.log(key) (или, лучше, точки останова), чтобы увидеть значения key, и ваша ошибка быстро станет очевидной.
 – 
Bergi
16 Сен 2023 в 22:55

2 ответа

Мало ошибок.

  1. вам нужно вернуть значение из функции
  2. Object.values на самом деле дает значения, а не ключи.
const objectWithNumbers = {
  a: 10,
  b: 20,
  c: "string",
  d: 12,
};

function sumObjectValues(obj) {
  return Object.values(obj).reduce((sum, val) => {
    if (typeof val === "number") {
      sum += val
    }
return sum
  }, 0);
}

const result = sumObjectValues(objectWithNumbers);
console.log(result);
//42should be 

Или вы можете использовать Object.keys

const objectWithNumbers = {
  a: 10,
  b: 20,
  c: "string",
  d: 12,
};

function sumObjectValues(obj) {
  return Object.keys(obj).reduce((sum, key) => {
    if (typeof obj[key] === "number") {
      sum += obj[key];
    }
return sum
  }, 0);
}

const result = sumObjectValues(objectWithNumbers);
console.log(result);
//42should be 
2
binga58 16 Сен 2023 в 20:34

Однострочник с тернарным оператором:

const objectWithNumbers = {
  a: 10,
  b: 20,
  c: "string",
  d: 12,
};

const sum = Object.values(objectWithNumbers).reduce((sum, val) => typeof val === 'number' ? sum + val : sum, 0);

console.log(sum);
0
Alexander Nenashev 17 Сен 2023 в 03:50