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

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

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

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

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

Ответы [ 3 ]

0 голосов
/ 12 июня 2018

При возврате объекта из стрелки необходимо, чтобы функция заключалась в круглые скобки:

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 и оператор распространения, чтобы полностью отобразить объект в другом объекте.

0 голосов
/ 14 июня 2018

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

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

console.log(
  Object.keys(objjjj).map((key, i) => {
    return objjjj[key] + 1
  })
)
0 голосов
/ 12 июня 2018

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

В противном случае он обрабатывается как оператор блока, где происходит стандартный возврат 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 })))
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...