你可以使用JavaScript的reduce函数来实现根据sourceMap去重并保留最新的值的功能。具体的步骤如下:
- 首先创建一个空的字典对象(dictionary)用来存储去重后的对象。
- 遍历原数组中的每一个元素,对于每一个元素,使用sourceMap作为键值去检查字典对象中是否已经存在该键值。
- 如果字典对象中不存在该键值,则将该元素添加到字典对象中并以sourceMap作为键值。
- 如果字典对象中已经存在该键值,则比较该元素的
cpasIndex
和字典对象中已有元素的cpasIndex
,如果该元素的cpasIndex
更大,则用该元素替换原有元素。
以下是该功能的实现代码:
const data = [ { "sourceMap": "金额", "dataListMap": "账面原值", "cpasIndex": 2, "devIndex": 1 }, { "sourceMap": "项目", "dataListMap": "主键", "cpasIndex": 1, "devIndex": 0 }, { "sourceMap": "test1", "dataListMap": "累计折旧", "cpasIndex": 3, "devIndex": 2 }, { "sourceMap": "test1", "dataListMap": "减值准备", "cpasIndex": 3, "devIndex": 3 }, { "sourceMap": "金额", "dataListMap": "账面价值", "cpasIndex": 2, "devIndex": 4 }];
const uniqueData = Object.values(data.reduce((dict, item) => {
if (!dict[item.sourceMap] || dict[item.sourceMap].cpasIndex < item.cpasIndex) {
dict[item.sourceMap] = item;
}
return dict;
}, {}));
console.log(uniqueData);
// Output:
// [
// { sourceMap: '金额', dataListMap: '账面价值', cpasIndex: 2, devIndex: 4 },
// { sourceMap: '项目', dataListMap: '主键', cpasIndex: 1, devIndex: 0 },
// { sourceMap: 'test1', dataListMap: '减值准备', cpasIndex: 3, devIndex: 3 }
// ]
在上述代码中,Object.values()
函数用于从字典对象中获取所有属性值作为最终结果返回。