JavaScript的。无法使用Object.keys()迭代对象以获取新内容

时间:2018-06-12 17:16:41

标签: javascript iterator

我在输入中有一个对象,如何在现有的基础上返回修改后的对象?

为了这个目的,我将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 :(得分:1)

你需要一些括号来包裹arrow functions中的花括号。

否则将其视为块语句,其中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 })))
);

答案 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和点差运算符将对象完全映射到另一个对象。

答案 2 :(得分:0)

您需要返回值,而不是再次分配给键。



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

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