如何将两个JSON对象转为指定差异数组?当前思路是否正确?
问题分析与解决方案
你的思路是否正确?
完全不正确,问题出在这几点:
- 用
for...in遍历Object.keys(obj_old)时,x是数组的索引(0、1、2),不是对象的键(比如'team'),所以obj_old[x]根本取不到对应的值,只会得到undefined。 - 嵌套循环完全多余,你要的是把两个对象相同键的新旧值配对,不需要交叉对比所有键的值。
- 代码完全没往
out数组里添加符合要求的对象,根本没实现目标功能。
更简洁的实现逻辑
假设两个对象的键完全一致(和你的示例一致),直接遍历键就能快速生成目标数组,有两种常用写法:
写法1:for...of 循环(直观易懂)
var obj_old = {'team':'arsenal', 'league':'premier','position': '3'} var obj_new = {'team':'arsenal_1', 'league':'premier_1','position': '32'} const out = [] // 遍历旧对象的所有键 for (const key of Object.keys(obj_old)) { out.push({ key: key, old: obj_old[key], new: obj_new[key] }) } console.log(out)
写法2:Array.map 函数式写法(更简洁)
var obj_old = {'team':'arsenal', 'league':'premier','position': '3'} var obj_new = {'team':'arsenal_1', 'league':'premier_1','position': '32'} const out = Object.keys(obj_old).map(key => ({ key, old: obj_old[key], new: obj_new[key] })) console.log(out)
两种写法都能生成你期望的数组格式,如果要兼容极旧的JS环境,把for...of换成普通for循环遍历键数组即可。
内容的提问来源于stack exchange,提问作者Rohan Hitachi
相关产品推荐
相关产品推荐

