[英]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.