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

时间:2019-08-28 08:41:11

标签: angular

问题很简单。

我如何使用'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}

4 个答案:

答案 0 :(得分:2)

U可以从库中使用lodash和uniqBy函数,这将是最快的方法:)

https://lodash.com/docs/4.17.15#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}](取最后一个值)

简单地实现此目的:

  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}]