问题很简单。
如何使用"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}]
预期结果(取最后一个值(
要简单地实现这一点:
- 创建一个具有键作为值"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}}
- 使用以下方法获取此对象的值:
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}]