let c = [{tenantId:1, cost:30}]; let b = c.filter(x => x.tenantId == 1); alert(b.length);Cuando creo la matriz c con un solo objeto como el código anterior, espero que b.length sea 0, pero es 1. Sin embargo, cuando agrego otro objeto a la matriz c y luego realizo la misma operación de filtro, obtuve el respuesta esperada, en la que b.length es igual a 1.(2 objetos filtrados 1 y dejados 1). ¿Alguien sabe por qué sucede?
.filter mantiene los elementos que coinciden con la prueba, en lugar de eliminarlos.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter
Si puede console.log() toda la matriz en lugar de simplemente la longitud, podrá ver lo que contiene. Alternativamente, podría alert(JSON.stringify(b)) .
let c = [{tenantId:1, cost:30}]; let b = c.filter(x => x.tenantId != 1); console.log(b.length); Debe agregar x.tenantId != 1 en esta línea de código.
Simplemente cambia el == a !== y estarás bien.
¿Por qué?:
El método de filter mantendrá todos los elementos que devuelvan verdadero cuando pasen por su condición. En su código original, le está diciendo al filtro que "Mantenga todos los objetos en esta matriz donde el identificador de tenantId es igual a 1 ". Si desea eliminarlos, debe decirle "Mantenga todos los objetos donde el ID de tenantId no sea igual a 1 ".
const arr = [{ tenantId: 1, cost: 30 }]; const filtered = arr.filter(({ tenantId }) => tenantId !== 1); console.log(filtered, `Length: ${filtered.length}`);