Задать вопрос
Weiss_Luxford
@Weiss_Luxford
Только учу програмирование, буду рад вашей помощи)

Слияние объектов не работает в «codewars», можете объяснить пожалуйста?

Вроде как этот код должен замержить два обьекта, не переписывая их значения, прибавляя их
процентов пятьдесят тестов проходит, а на остальные выводит ошибку вот такую

Value is not what was expected

Тут ссылка на Kata Слияние объектов

Можете посоветовать, что тут нужно изменить, я никак не могу понять что изменить, да и в codewars никаких уточнений нет почему мой код не проходит тесты

function combine(a = {}, b = {}, c = {}) {
  const arrObj = [a, b, c]
  const newObj = {}
  arrObj.forEach((value, index, arr) => {
    for (const [keys, values] of Object.entries(value)) {
      if( !newObj.hasOwnProperty(keys)){
        newObj[keys] = values
      } else {
        newObj[keys] = newObj[keys] + values
      }
    }
  })
  console.log(arrObj)
  console.log(newObj)
  return newObj
}
  • Вопрос задан
  • 472 просмотра
Подписаться 1 Простой 4 комментария
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
function combine(a = {}, b = {}, c = {}) {

Читаю текст задачи сверху вниз, снизу вверх, так, сяк, наперекосяк, и никак не могу найти там место, где говорится, что объектов в функцию будет передаваться не больше трёх.

Как обработать заранее неизвестное количество аргументов?

Можно собрать их в массив:

const combine = (...arr) => arr
  .flatMap(Object.entries)
  .reduce((acc, [ k, v ]) => (acc[k] = (acc[k] ?? 0) + v, acc), {});

Или, воспользоваться уже готовым массивоподобным объектом:

function combine() {
  const result = {};

  for (const n of arguments) {
    for (const k in n) {
      if (n.hasOwnProperty(k)) {
        if (!result.hasOwnProperty(k)) {
          result[k] = 0;
        }

        result[k] += n[k];
      }
    }
  }

  return result;
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы