Javascript 如何在Angular中删除重复数据?
如何删除重复资产 列表.组件.ts 输出 预期产出 重复对象应返回如下所示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,‘日
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);