Tengo esta matriz de objetos:
[ {name: "John", surname: "Doe", car: "BWM"}, {name: "Louis", surname: "Vuitton", car: "MERCEDES"}, {name: "Bob", surname: "Ross", car: "FORD"}, {name: "Dylan", surname: "James", car: "FERRARI"}, {name: "Damien", surname: "Rivers", car: "JAGUAR"}, ]y tengo este codigo
return this._object.filter(object => object.car === params1 && object.car === params2 && object.car=== params3)los params pueden ser de cualquier marca de automóvil, pero son opcionales además de params1, el usuario puede proporcionar solo params1 y dejar los otros dos sin definir.
El usuario selecciona los parámetros en una opción html seleccionada, puede elegir hasta 3 marcas de automóviles, por lo que 3 parámetros y los paso como parámetros de URL y paso estos parámetros a mi función
Quiero hacer algo como en una línea: si existen params2 y params3, no cambie el fragmento de código, si no existen, solo haga el filtro en params1
Ejemplo 1: if params1 = BMW and params 2-3 = undefined , devolvería este objeto {name: "John", surname: "Doe", car: "BWM"}
Ejemplo 2: if params1 = BMW, params2 = MERCEDES devolvería este resultado:
{name: "John", surname: "Doe", car: "BWM"} {name: "Louis", surname: "Vuitton", car: "MERCEDES"},`Mismo concepto con params 3 == FERRARI
No puedo ver cómo puedo hacer eso con unas pocas líneas/una línea, además de hacer declaraciones if en todas partes
Gracias !
puedes hacer algo como esto
const filterData = (data, ...params) => data.filter(d => params.includes(d.car)) const data = [{name: "John", surname: "Doe", car: "BMW"}, {name: "Louis", surname: "Vuitton", car: "MERCEDES"}, {name: "Bob", surname: "Ross", car: "FORD"}, {name: "Dylan", surname: "James", car: "FERRARI"}, {name: "Damien", surname: "Rivers", car: "JAGUAR"},] console.log(filterData(data, 'BMW')) console.log(filterData(data, 'BMW', 'MERCEDES'))Puede hacer que el código sea aún más flexible. En lugar de pasar 3 parámetros diferentes, pase una matriz como la siguiente.
let cars = ["BMW", "MERCEDES"];ahora puede verificarlo usando el método include de javascript.
return this._object.filter(object => cars.includes(object.car))Mediante el uso de Array.prototype.includes() puede comparar varias expresiones de destino. Devolverá true si el argumento es igual a al menos un elemento de la matriz.
En un args.map() inicial, me aseguro de que los valores de entrada estén en mayúsculas.
const data=[{name: "John", surname: "Doe", car: "BMW"}, {name: "Louis", surname: "Vuitton", car: "MERCEDES"}, {name: "Bob", surname: "Ross", car: "FORD"}, {name: "Dylan", surname: "James", car: "FERRARI"}, {name: "Damien", surname: "Rivers", car: "JAGUAR"}]; function filt(...args){ args=args.map(a=>a.toUpperCase()); return data.filter(d=> args.includes(d.car)) } console.log(filt("BMW","Mercedes")); console.log(filt("jaguar"))