使用forEach避免临时变量

时间:2018-01-21 11:43:00

标签: javascript ecmascript-6

我想改变这个

const data = {
  "title": {
    "color": "red",
    "value": "Hello World"
  },
  "category": {
    "color": "blue",
    "value": "News"
  }
}

{title: "Hello World", category: "News"}

不确定我是否过于复杂,我做了这个

let temp = {}
Object.keys(data).forEach(o=>{
  temp = {...temp, [o]: data[o].value}
})
console.log(temp)

它工作但我必须声明一个临时变量,我可以在任何地方改进代码吗?

3 个答案:

答案 0 :(得分:2)

您可以使用展开式Object.assign()

map()...方法



const data = {"title":{"color":"red","value":"Hello World"},"category":{"color":"blue","value":"News"}}

const result = Object.assign({}, ...Object.keys(data).map(e => ({[e]: data[e].value})))
console.log(result)




您也可以reduce()使用Object.assign()代替map()



const data = {"title":{"color":"red","value":"Hello World"},"category":{"color":"blue","value":"News"}}

const result = Object.keys(data).reduce((r, e) => Object.assign(r, {[e]: data[e].value}), {})
console.log(result)




答案 1 :(得分:1)

对于它的价值,使用临时变量本身并不是坏事,特别是如果它使你的意图更清晰。

let unpacked = {};

for (let key in data) {
  unpacked[key] = data[key].value;
}

这也可以防止您需要为迭代中的每个键创建整个对象的新副本。

答案 2 :(得分:0)

试试这个

Object.keys(data).reduce((temp,o)=>{return {...temp,[o]: data[o].value} }, {})