角度 - 删除具有相同名称元素的数组中的重复项



问题很简单。

如何使用"alarma"元素过滤此数组以仅获取一个

0: {alarma: 1797, nroSerie: "8764368", nombre: "Alarma cable cortado", fechaInicio: 1566194460, fechaFin: 1566311460}
1: {alarma: 1797, nroSerie: "8764368", nombre: "Alarma cable cortado", fechaInicio: 1566311460, fechaFin: 1566311580}
2: {alarma: 1797, nroSerie: "8764368", nombre: "Alarma cable cortado", fechaInicio: 1566311580, fechaFin: null}

你可以使用 lodash 并从库中函数 uniqBy,这将是最快的:)

https://lodash.com/docs/4.17.15#uniqBy

您可以创建一个泛型函数GetDistinctValues(Source, Filterkey),该函数将采用数组中对象的任何数据数组和任何筛选键

尝试如下:

dataarray = [
{ alarma: 1797, nroSerie: "8764368", nombre: "Alarma cable cortado", fechaInicio: 1566194460, fechaFin: 1566311460 },
{ alarma: 1797, nroSerie: "8764368", nombre: "Alarma cable cortado", fechaInicio: 1566311460, fechaFin: 1566311580 },
{ alarma: 1797, nroSerie: "8764368", nombre: "Alarma cable cortado", fechaInicio: 1566311580, fechaFin: null }
]
ngOnInit() {
var distinctValue = this.GetDistinctValues(this.dataarray, 'alarma')
console.log(distinctValue)
}

GetDistinctValues(Source: Array<any>, FilterKey: string = null): Array<any> {
let DistinctArray = [];
try {
Source.forEach((e) => {
if (FilterKey !== null && FilterKey !== undefined && FilterKey !== "") {
if (DistinctArray.filter(((DE) => DE[FilterKey] === e[FilterKey])).length <= 0)
DistinctArray.push(e);
}
else {
if (DistinctArray.indexOf(e) === -1)
DistinctArray.push(e);
}
});
} catch (error) {
DistinctArray = [];
}
return DistinctArray;
}

一种选择是使用

array.indexOf(obj(

功能。如果数组已经具有相同的元素,indexOf 函数将返回一些有效的索引。在执行之前

array.push(obj(

检查

array.indexOf(obj(.

功能优先

如果您想在不使用库的情况下通过给定键删除重复项lodash您可以执行以下操作:

对于给定的数组[{a: 5, b: 7}, {a: 5, b: 99}, {a: 6, b: 1}, {a: 6, b: 0}]可以[{a: 5, b: 99}, {a: 6, b: 0}]预期结果(取最后一个值(

要简单地实现这一点:

  1. 创建一个具有键作为值"a"属性的对象:
const array = [{a: 5, b: 7}, {a: 5, b: 99}, {a: 6, b: 1}, {a: 6, b: 0}];
const unique = array.reduce((acc, value) => { 
acc[value.a] = value; 
return acc;
}, {});

unique对象将如下所示:

{"5":{"a":5,"b":99},"6":{"a":6,"b":0}}
  1. 使用以下方法获取此对象的值:
const result = Object.values(unique);

result值将为:

[{"a":5,"b":99},{"a":6,"b":0}]

如果只想获取重复项的第一项,请将代码更改为

const array = [{a: 5, b: 7}, {a: 5, b: 99}, {a: 6, b: 1}, {a: 6, b: 0}];
const unique = array.reduce((acc, value) => { 
acc[value.a] = acc[value.a] || value; // note the changes at this line
return acc;
}, {});
const result = Object.values(unique);

输出将是:

[{"a":5,"b":7},{"a":6,"b":1}]

最新更新