Javascript 如何以角度比较/合并两个数组
如何基于Javascript 如何以角度比较/合并两个数组,javascript,angular,typescript,Javascript,Angular,Typescript,如何基于assetCode比较/合并两个数组 代码如下: 列表.组件.ts 数据=[ { 代码:“机器1”, 资产代码:“PRN”, 资产账户:1, 日期:“2019-01-18 00:00:00” }, { 代码:“机器1”, 资产代码:“PRN”, 资产账户:1, 日期:“2019-01-19 00:00:00” }, { 代码:“机器2”, 资产代码:“PRN 1”, 资产账户:3, 日期:“2019-01-20 00:00:00” }, { 代码:“机器3”, 资产代码:“PRN”, 资
assetCode
比较/合并两个数组
代码如下:
列表.组件.ts
数据=[
{
代码:“机器1”,
资产代码:“PRN”,
资产账户:1,
日期:“2019-01-18 00:00:00”
},
{
代码:“机器1”,
资产代码:“PRN”,
资产账户:1,
日期:“2019-01-19 00:00:00”
},
{
代码:“机器2”,
资产代码:“PRN 1”,
资产账户:3,
日期:“2019-01-20 00:00:00”
},
{
代码:“机器3”,
资产代码:“PRN”,
资产账户:1,
日期:“2019-01-21 00:00:00”
},
{
代码:“机器4”,
资产代码:“PRN 1”,
资产账户:3,
日期:“2019-01-22 00:00:00”
},
{
代码:“机器5”,
资产代码:“PRN 1”,
资产账户:3,
日期:“2019-01-23 00:00:00”
}
];
结果=[];
构造函数(){
this.result=this.setData(this.data);
}
setData(paramsArr:Array这是reduce的一个很好的用例
数据=[
{
代码:“机器1”,
资产代码:“PRN”,
资产账户:1,
日期:“2019-01-18 00:00:00”
},
{
代码:“机器1”,
资产代码:“PRN”,
资产账户:1,
日期:“2019-01-19 00:00:00”
},
{
代码:“机器2”,
资产代码:“PRN 1”,
资产账户:3,
日期:“2019-01-20 00:00:00”
},
{
代码:“机器3”,
资产代码:“PRN”,
资产账户:1,
日期:“2019-01-21 00:00:00”
},
{
代码:“机器4”,
资产代码:“PRN 1”,
资产账户:3,
日期:“2019-01-22 00:00:00”
},
{
代码:“机器5”,
资产代码:“PRN 1”,
资产账户:3,
日期:“2019-01-23 00:00:00”
}
];
const merge=array=>array.reduce((结果,项目)=>{
const data=results.find(i=>i.code==item.code);
如果(数据){
data.assets[item.assetCode]=(data.assets[item.assetCode]| | 0)+item.assetCount;
}否则{
结果:推({
代码:item.code,
资产:{[item.assetCode]:item.assetCount}
});
}
返回结果;
}, []);
console.log(merge(data));
您可能更喜欢-数组``的值是多少?参数“array”隐式地有一个“any”类型。
array:=[];``您可以为TypeScript添加类型,我不能在JS代码段中这样做它看起来像const merge=(array:YourType[])=>array.reduce((结果:YourType[],item:YourType)=>
data = [
{
code: "Machine 1",
assetCode: "PRN",
assetCount: 1,
date: "2019-01-18 00:00:00"
},
{
code: "Machine 1",
assetCode: "PRN",
assetCount: 1,
date: "2019-01-19 00:00:00"
},
{
code: "Machine 2",
assetCode: "PRN 1",
assetCount: 3,
date: "2019-01-20 00:00:00"
},
{
code: "Machine 3",
assetCode: "PRN",
assetCount: 1,
date: "2019-01-21 00:00:00"
},
{
code: "Machine 4",
assetCode: "PRN 1",
assetCount: 3,
date: "2019-01-22 00:00:00"
},
{
code: "Machine 5",
assetCode: "PRN 1",
assetCount: 3,
date: "2019-01-23 00:00:00"
}
];
result = [];
constructor() {
this.result = this.setData(this.data);
}
setData(paramsArr: Array<any>): Array<any> {
let newData1 = [];
paramsArr.forEach(x => {
const existing = newData1.find((y: any) => format(y.date, 'YYYY-MM') === format(x.date, 'YYYY-MM')
&& y.assetCode === x.assetCode && y.code === x.code);
if (existing) {
existing.assetCount += existing.assetCount;
} else {
newData1.push(x);
}
});
let newData2 = [];
newData1.forEach(x => {
if (newData2.filter((y: any) => y.assetCode === x.assetCode).length <= 0) {
newData2.push(
{
assetCode: x.assetCode,
date: x.date
}
);
}
});
return newData1;
}