我想改变这个
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)
它工作但我必须声明一个临时变量,我可以在任何地方改进代码吗?
答案 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} }, {})