Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/442.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在Angular中删除重复数据?_Javascript_Angular - Fatal编程技术网

Javascript 如何在Angular中删除重复数据?

Javascript 如何在Angular中删除重复数据?,javascript,angular,Javascript,Angular,如何删除重复资产 列表.组件.ts 输出 预期产出 重复对象应返回如下所示 rowData = ["PRN", "PRN2"] 可以使用与从数组中筛选唯一值: var rowData=[ {‘代码’:‘BSA’,‘资产’:‘PRN’,‘资产账户’:1,‘日期’:‘2018-02-01 03:00:00’, {‘代码’:‘BSIT’,‘资产’:‘PRN’,‘资产账户’:2,‘日期’:‘2019-01-01:01:00’, {‘代码’:‘BSCS’,‘资产’:‘PRN2’,‘资产账户’:3,‘日

如何删除重复资产

列表.组件.ts

输出

预期产出

重复对象应返回如下所示

rowData = ["PRN", "PRN2"]
可以使用与从数组中筛选唯一值:

var rowData=[
{‘代码’:‘BSA’,‘资产’:‘PRN’,‘资产账户’:1,‘日期’:‘2018-02-01 03:00:00’,
{‘代码’:‘BSIT’,‘资产’:‘PRN’,‘资产账户’:2,‘日期’:‘2019-01-01:01:00’,
{‘代码’:‘BSCS’,‘资产’:‘PRN2’,‘资产账户’:3,‘日期’:‘2019-01-01 00:10:00’,
{‘代码’:‘BSBA’,‘资产’:‘PRN2’,‘资产账户’:5,‘日期’:‘2019-01-01 01:00:00’,
{‘代码’:‘BSE’,‘资产’:‘PRN’,‘资产账户’:6,‘日期’:‘2019-02-01 00:20:00’,
];
让valArr=[…新集合(rowData.map(item=>item['asset']))];

控制台日志(valArr)您可以使用reduce方法来执行此操作。不要过多使用lodash

let valArr = rowData.reduce((accumulator, currentValue) => {
   if(accumulator.indexOf(currentValue.asset) === -1)
     accumulator.push(currentValue.asset);
   return accumulator;
},[]);

实现这一点的方法有很多。
1. 使用数组筛选方法

let valArr = this.rowData.map((item) => item['asset'])
                 .filter((asset, index, selfArray) => selfArray.indexOf(asset) === index);
  • 使用JSON或Map: A.将项['asset']存储在json中,而不是存储在数组中
    让myJson={};
    this.rowData.forEach(item=>myJson[item['asset']]]=item//put any thing you want,因为您只关心键。)
    /**现在如果你只想要数组格式的键,
    *然后可以将它们转换为数组**/
    让finalArray=Object.keys(myJson);
    
  • 使用集合:看马蒙的答案

  • 对于数组操作,我建议您使用Loadash,因为它有各种各样的函数来处理数组

    如果要使用Lodash,请通过
    npm i Lodash

    然后通过组件中的下线导入“uniqBy”

    import uniqBy from  'lodash'
    
      let uniqDataSet = uniqBy(this.rowData, (data)=>{
            return data["asset"]
        });
    
    uniqDataSet将为您提供唯一的数据集。

    我的解决方案:

    var rowData=[
    {‘代码’:‘BSA’,‘资产’:‘PRN’,‘资产账户’:1,‘日期’:‘2018-02-01 03:00:00’,
    {‘代码’:‘BSIT’,‘资产’:‘PRN’,‘资产账户’:2,‘日期’:‘2019-01-01:01:00’,
    {‘代码’:‘BSCS’,‘资产’:‘PRN2’,‘资产账户’:3,‘日期’:‘2019-01-01 00:10:00’,
    {‘代码’:‘BSBA’,‘资产’:‘PRN2’,‘资产账户’:5,‘日期’:‘2019-01-01 01:00:00’,
    {‘代码’:‘BSE’,‘资产’:‘PRN’,‘资产账户’:6,‘日期’:‘2019-02-01 00:20:00’,
    ];
    设seenItBefore={};
    设重复项=[];
    rowData.forEach({asset})=>{
    如果(请参见[asset]&&!duplicates.includes(asset)){
    重复。推送(资产);
    }
    seenItBefore[资产]=真;
    });
    控制台日志(重复)
    

    错误:
    类型“Set”不是数组类型或字符串类型。使用编译器选项“--downlevelIteration”来允许迭代器的迭代。
    转到
    tsconfig.json
    并添加
    “downlevelIteration”:true“
    编译器选项
    。您可能还需要更改
    “目标”:“es5”
    到es6也会导致
    设置
    是es6新增的一项功能downlevelIteration“:true
    编译器选项中,而且我已经将
    es5
    转换为
    es6
    如果你不费心过滤
    valArr
    那么你可以过滤
    valArr
    valArr.filter((elem,index,self)=>{return index==self.indexOf(elem)})
    acc的值是多少?acc实际上是累加器。我忘了更改它。现在编辑。我希望它现在对您有用
    let valArr = this.rowData.map((item) => item['asset'])
                     .filter((asset, index, selfArray) => selfArray.indexOf(asset) === index);
    
    import uniqBy from  'lodash'
    
      let uniqDataSet = uniqBy(this.rowData, (data)=>{
            return data["asset"]
        });
    
    var rowData = [
        { 'code': 'BSA', 'asset': 'PRN', 'assetCount': 1, 'date': '2018-02-01 03:00:00' },
        { 'code': 'BSIT', 'asset': 'PRN', 'assetCount': 2, 'date': '2019-01-01 01:01:00' },
        { 'code': 'BSCS', 'asset': 'PRN2', 'assetCount': 3, 'date': '2019-01-01 00:10:00' },
        { 'code': 'BSBA', 'asset': 'PRN2', 'assetCount': 5, 'date': '2019-01-01 01:00:00' },
        { 'code': 'BSE', 'asset': 'PRN', 'assetCount': 6, 'date': '2019-02-01 00:20:00' },
    ];
    
    let unique = [];
    
    rowData.forEach(row => {
      if (unique.indexOf(row.asset) === -1) {
        unique.push(row.asset);
      }
    });
    
    console.log(unique);