matriz de fechas -
const WEXDateArray = WEXFile.map((r) => r.Date); const uniqueDateArray = WEXDateArray.filter((item, pos) => { return WEXDateArray.indexOf(item) == pos; });Muestra de dátiles -
[ '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' ]arreglos de objetos -
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' } ]Explicación: obtengo un archivo CSV del cliente y necesito eliminar objetos de la matriz de objetos cuando 2 filas de la misma cantidad de exec devuelven 0 cuando los suma. Lo que hice fue obtener una matriz solo con las fechas. Y creó un nuevo objeto con matrices por fechas. Lo que no pude hacer es eliminar objetos por esta condición:
si hay en Exec Qty [1, -2, 2, 4, 5, 6, -6] devuelva [1, 4, 5]
Y después de eso, podré concatenar las matrices en una nueva matriz y devolver la matriz sin [-2, 2] .
Así que aquí es donde estoy parado en este momento:
let finalWEXArray: IWEXInterface[] = []; for (const date of uniqueDateArray) { finalWEXArray = WEXFileArraySeparatedByDates[date!]; } ¿Cómo puedo filtrar las matrices según las condiciones que mencioné anteriormente y almacenarlas en finalWEXArray
No es la solución más eficiente, pero hace el trabajo:
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--; } }¿Como funciona? Itera la matriz y para cada elemento verifica si hay un elemento con la misma fecha pero cantidad inversa. Si se encuentra tal elemento, elimine ambos. Solo incremente el índice si no se eliminó ningún elemento, porque de lo contrario omitiría algunos elementos en la verificación.