Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.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 如何以角度比较/合并两个数组_Javascript_Angular_Typescript - Fatal编程技术网

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