actualizando la matriz filtrada cada vez que la matriz original agrega/ingresa un nuevo elemento
así que cada vez que ingreso un nuevo elemento en la matriz original, la matriz filtrada se actualiza y considera si el nuevo elemento está en su condición
¿Qué pasa con esto? Estoy anulando el método de inserción de la matriz original, de modo que cuando se agregue un nuevo elemento, se llamará a otro método para actualizar la matriz filtrada:
var originalArray = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; var filteredArray = [...originalArray]; var filters = []; // FUNCION THAT RECEIVES AN ARRAY AND OVERRIDES THE PUSH METHOD //SO THAT IT CAN EXECUTE A FUNCION AFTER PUSHING THE NEW ELEMENT var AddEventToArrayPush = (arr, callback) => { arr.push = function(e) { Array.prototype.push.call(arr, e); callback(arr); }; }; var ResetFilters = () => { filters = []; filteredArray = [...originalArray]; } var AddFilter = (filter) => { filters.push(filter); } var ApplyFilters = () => { filteredArray = [...originalArray]; for (const filter of filters) { filteredArray = filteredArray.filter(filter); } } //CALLING THE FUNCTION TO OVERRIDE PUSH METHOD FOR THE ORIGINAL ARRAY AddEventToArrayPush(originalArray, ApplyFilters) // SOME FILTERS const IS_EVEN_NUMBER = (number) => { return number % 2 == 0 }; const IS_GREATER_THEN_5 = (number) => { return number > 5 }; console.log("Initial filtered array:"); console.log(filteredArray.toString()); console.log("\r\nFiltering even numbers greater than 5"); AddFilter(IS_EVEN_NUMBER); AddFilter(IS_GREATER_THEN_5); ApplyFilters(); console.log("\r\nFiltered array after applying filters:"); console.log(filteredArray.toString()); originalArray.push(20); console.log("\r\nFiltered array after pushing new element into original array:"); console.log(filteredArray.toString());