问题很简单。
我如何使用'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}
答案 0 :(得分:2)
U可以从库中使用lodash和uniqBy函数,这将是最快的方法:)
答案 1 :(得分:0)
您可以创建一个通用函数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;
}
答案 2 :(得分:0)
一种选择是使用
array.indexOf(obj)
功能。如果数组已经具有相同的元素,则indexOf函数将返回一些有效的索引。
之前array.push(obj)
检查
array.indexOf(obj)。
功能优先
答案 3 :(得分:0)
如果您想通过给定的键消除重复项,而不使用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}]
(取最后一个值)
简单地实现此目的:
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}]