<笔记> 对象数组去重2

60 阅读1分钟

你可以使用JavaScript的reduce函数来实现根据sourceMap去重并保留最新的值的功能。具体的步骤如下:

  1. 首先创建一个空的字典对象(dictionary)用来存储去重后的对象。
  2. 遍历原数组中的每一个元素,对于每一个元素,使用sourceMap作为键值去检查字典对象中是否已经存在该键值。
  3. 如果字典对象中不存在该键值,则将该元素添加到字典对象中并以sourceMap作为键值。
  4. 如果字典对象中已经存在该键值,则比较该元素的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()函数用于从字典对象中获取所有属性值作为最终结果返回。