如何优化使用forEach的对象转换代码以避免临时变量?
优化方案推荐
当然有更简洁的优化方式啦!这里给你推荐几种不用显式声明临时变量的写法,代码更紧凑也更符合现代JavaScript的风格:
1. 使用 Object.fromEntries() + 解构赋值
这个方法是处理键值对转换的绝佳选择,逻辑清晰且代码简洁:
const data = { "title": { "color": "red", "value": "Hello World" }, "category": { "color": "blue", "value": "News" } }; const transformedData = Object.fromEntries( Object.entries(data).map(([key, { value }]) => [key, value]) ); console.log(transformedData); // 输出: {title: "Hello World", category: "News"}
这里通过Object.entries(data)把原对象转换成[键名, 子对象]的数组,再用map遍历数组,通过解构直接取出子对象里的value,最后用Object.fromEntries()把处理后的键值对数组转回对象。
2. 使用 Array.prototype.reduce()
reduce方法可以在遍历过程中直接累积结果,无需额外声明临时变量:
const data = { "title": { "color": "red", "value": "Hello World" }, "category": { "color": "blue", "value": "News" } }; const transformedData = Object.keys(data).reduce((acc, key) => { acc[key] = data[key].value; return acc; }, {}); console.log(transformedData); // 输出: {title: "Hello World", category: "News"}
这里reduce的初始值是一个空对象{},每次迭代时把当前键对应的value赋值给累加器acc,最后返回累加器即可得到目标对象。
这两种方法都避免了显式声明临时变量temp,代码更简洁易读,其中Object.fromEntries()的写法更直观,非常适合这种扁平化对象的场景哦!
内容的提问来源于stack exchange,提问作者Thian Kian Phin
相关产品推荐
相关产品推荐

