如何将两个指定对象转换为无嵌套的单一键值对对象?
解决方法:将对象转换为以id为键的扁平化对象
嘿,我来帮你搞定这个问题!你想要把两个对象的id作为新对象的键,value作为对应的值,对吧?先说说你之前尝试的方法为什么不对:你用Object.keys(a).forEach(...)遍历的是a的键(也就是id和value),然后把b对应键的值赋值给a,这其实是在修改原对象a,完全没用到id作为新键的逻辑,当然得不到想要的结果啦~
下面给你几种简单有效的实现方式:
1. 手动构建(适合少量对象的情况)
如果只有a和b两个对象,直接用ES6的计算属性名就能快速创建目标对象:
const a = {id: "1", value: "hello"}; const b = {id: "2", value: "bye"}; const c = { [a.id]: a.value, [b.id]: b.value }; // 输出:{ '1': 'hello', '2': 'bye' }
这里的[a.id]会把a.id的值(也就是"1")作为对象的键,JS里对象的键本质是字符串,但显示的时候会自动处理成类似数字的形式,和你想要的c结构一致。
2. 使用Object.fromEntries()(适合批量对象的情况)
如果以后你有更多这类对象,把它们放到数组里,用Object.fromEntries()会更高效:
const a = {id: "1", value: "hello"}; const b = {id: "2", value: "bye"}; const objects = [a, b]; const c = Object.fromEntries(objects.map(item => [item.id, item.value])); // 输出:{ '1': 'hello', '2': 'bye' }
- 第一步用
map把每个对象转换成[键, 值]的数组(比如["1", "hello"]) - 然后
Object.fromEntries()把这个二维数组直接转换成目标对象
3. 使用reduce方法(另一种批量处理方式)
如果你更习惯数组的reduce操作,也可以这么写:
const a = {id: "1", value: "hello"}; const b = {id: "2", value: "bye"}; const objects = [a, b]; const c = objects.reduce((result, item) => { result[item.id] = item.value; return result; }, {}); // 输出:{ '1': 'hello', '2': 'bye' }
这里的reduce从空对象{}开始,每次迭代把当前对象的id和value添加到结果对象里,最后返回完整的目标对象。
内容的提问来源于stack exchange,提问作者arled
相关产品推荐
相关产品推荐

