JavaScript. Невозможно выполнить итерацию объекта с помощью Object.keys (), чтобы получить новый

1

У меня есть объект на входе, как мне вернуть измененный объект на основе существующего?

Для этой цели я использовал Object.keys() в сочетании с map() итератора map(). Но что-то не работает, я не знаю.

let objjjj = {
  a: 2,
  b: 3,
  c: 4
}

console.log(
  Object.keys(objjjj).map((key, i) => {
    key: objjjj[key] + 1
  })
)
  • 0
    Функции стрелок, возвращающие объект, должны иметь указанный объект в скобках, чтобы отличить его от блока кода. Также обратите внимание, что результат, который получит ваш текущий код, с указанными скобками, очень своеобразен. Самое интересное, что вы не используете вычисляемые имена свойств, то есть все объекты будут иметь свойство с именем key . И последнее, но не менее, вы регистрируете массив объектов (по одному для каждого свойства), который совсем не похож на то, что вы хотите.
  • 1
    Object.keys(objjjj).forEach(key => objjjj[key]++);
Теги:
iterator

3 ответа

1
Лучший ответ

Для скобки фигурных скобок в стрелочных функциях вам нужны скобки.

В противном случае он рассматривается как оператор блока, где имеет место стандартный возврат undefined.

Для создания одного объекта вы можете распространить отдельные объекты на Object.assign.

let object = { a: 2, b: 3, c: 4 };
    
console.log(
    Object.assign(...Object.keys(object).map((key, i) => ({ [key]: object[key] + 1 })))
);

Хотя вам нужен ключ и значение, вы можете взять Object.entries.

let object = { a: 2, b: 3, c: 4 };
    
console.log(
    Object.assign(...Object.entries(object).map(([k, v]) => ({ [k]: v + 1 })))
);
  • 0
    Спасибо, но мне нужен новый объект, как это было раньше, вместо создания дополнительных объектов внутри. Я имею в виду const obj = { 'key': 3, "key": 4 ....}
  • 0
    это не работает с теми же ключами. пожалуйста, добавьте возможный альтернативный результат.
Показать ещё 9 комментариев
0

Вместо этого вам нужно вернуть значение, чтобы снова назначить ключ.

let objjjj = {
  a: 2,
  b: 3,
  c: 4
}

console.log(
  Object.keys(objjjj).map((key, i) => {
    return objjjj[key] + 1
  })
)
0

Когда вы возвращаете объект из стрелки, необходимо, чтобы вы окружали его круглыми скобками:

let obj = {
  a: 2,
  b: 3,
  c: 4
}

console.log(
  Object.keys(obj)
  .reduce((acc, key) => ({
    ...acc,
    [key]: obj[key] + 1
  }), {})
)

// Or by using Object.entries


console.log(
  Object.entries(obj)
  .reduce((acc, [key, value]) => ({
    ...acc,
    [key]: value + 1
  }), {})
)

ОБНОВИТЬ:

Основываясь на комментарии от другого ответа, вы можете использовать reduce и оператор спредов для полной привязки объекта к другому объекту.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню