JavaScript中从对象数组生成多对象并实现ID去重方法
正确实现方式及ID去重方案
问题分析
你之前的代码失败原因有两个:
- 对象里重复定义了属性,后面的属性会直接覆盖前面的,最终每个原对象只能生成一个子对象
map方法每次遍历只能返回一个元素,无法一次生成两个子对象
基础实现(无去重)
使用flatMap替代map,它允许我们每次遍历返回一个包含两个子对象的数组,最终自动扁平化合并成目标数组:
const data = [ { "id": 1, "locationone": "California, United States", "idtwo": 2, "locationtwo": "Atherton, United States" }, { "id": 3, "locationone": "London", "idtwo": 4, "locationtwo": "New Jersey" } ]; const result = data.flatMap(item => [ { id: item.id, location: item.locationone }, { id: item.idtwo, location: item.locationtwo } ]); console.log(result);
执行后就能得到你期望的结果数组。
确保ID唯一的实现
如果原数组中存在重复的id或idtwo值,可以通过Set记录已出现的ID,配合filter过滤重复项:
const seenIds = new Set(); const uniqueResult = data.flatMap(item => [ { id: item.id, location: item.locationone }, { id: item.idtwo, location: item.locationtwo } ]).filter(item => { if (seenIds.has(item.id)) { return false; } seenIds.add(item.id); return true; }); console.log(uniqueResult);
这个方案会保留每个ID第一次出现的子对象,后续重复ID的对象会被过滤掉。
内容的提问来源于stack exchange,提问作者Areeba Akhtar
相关产品推荐
相关产品推荐

