繁体   English   中英

过滤对象数组 - 当负值和正值匹配时删除对象

[英]filter array of objects - remove objects when negative and positive values are matching

日期数组 -

const WEXDateArray = WEXFile.map((r) => r.Date);

const uniqueDateArray = WEXDateArray.filter((item, pos) => {
        return WEXDateArray.indexOf(item) == pos;
      });

日期样本 -

[
  '8/2/2021',  '8/3/2021',
  '8/4/2021',  '8/5/2021',
  '8/6/2021',  '8/9/2021',
  '8/10/2021', '8/11/2021',
  '8/12/2021', '8/13/2021',
  '8/16/2021', '8/17/2021',
  '8/18/2021', '8/19/2021',
  '8/20/2021', '8/25/2021',
  '8/26/2021', '8/30/2021',
  '8/31/2021'
]

arrays 对象 -

const WEXFileArraySeparatedByDates: IWEXInterfaceArrayOfArrays =
        WEXFile.reduce((r, WEX) => {
          r[WEX.Date!] = r[WEX.Date!] || [];
          r[WEX.Date!].push(WEX);
          return r;
        }, Object.create(null));


[
  {
    Date: '8/30/2021',
    'Exec Qty': '15',
    'Call/Put': 'P'
  },
  {
    Date: '8/30/2021',
    'Exec Qty': '13',
    'Call/Put': 'P'
  },
  {
    Date: '8/30/2021',
    'Exec Qty': '8',
    'Call/Put': 'P'
  },
  {
    Date: '8/30/2021',
    'Exec Qty': '14',
    'Call/Put': 'P'
  },
  {
    Date: '8/30/2021',
    'Exec Qty': '12',
    'Call/Put': 'P'
  },
  {
    Date: '8/30/2021',
    'Exec Qty': '-75',
    'Call/Put': 'P'
  {
    Date: '8/30/2021',
    'Exec Qty': '75',
    'Call/Put': 'P'
  }
]
[
  {
    Date: '8/31/2021',
    'Exec Qty': '4000',
    'Call/Put': 'P'
  },
  {
    Date: '8/31/2021',
    'Exec Qty': '2000',
    'Call/Put': 'P'
  }
]

说明 - 我从客户端获得 CSV 文件,当您将它们相加时,当来自同一 exec qty 的 2 行返回 0 时,我需要从对象数组中删除对象。 我所做的是只获取一个包含日期的数组。 并按日期创建了一个新的 object 和 arrays。 我不能做的是在这种情况下删除对象 -

如果有 Exec Qty [1, -2, 2, 4, 5, 6, -6]返回[1, 4, 5]

之后,我将能够将 arrays 连接到新数组并返回没有[-2, 2]的数组。

所以这就是我现在站的地方——

let finalWEXArray: IWEXInterface[] = [];
      for (const date of uniqueDateArray) {
    finalWEXArray = WEXFileArraySeparatedByDates[date!];
  }

如何通过我上面提到的条件过滤 arrays 并将它们存储在finalWEXArray

不是最有效的解决方案,但可以完成工作:

for (let i = 0; i< arr.length; i++){
  let j = arr.findIndex(x => x.Date === arr[i].Date && +x.qty + +arr[i].qty === 0);

  if (j !== -1) { 
    arr.splice(j, 1)
    arr.splice(i, 1)
    i--;
  }
}

它是如何工作的? 它迭代数组,并检查每个元素是否存在日期相同但数量相反的元素。 如果找到这样的元素,则将两者都删除。 如果没有元素被删除,只增加索引,否则你会跳过检查中的一些元素。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM