Quiero filtrar elementos de la lista. Cuando se proporcionará una determinada categoría como un valor para la variable de destino, el método de filtro debe devolver solo los elementos con esa categoría. pero cuando no se proporciona ninguna categoría, quiero obtener elementos de todas las categorías, independientemente de la categoría. En mi código a continuación funciona bien, pero quiero una lógica más clara para filtrar elementos cuando no se proporciona una categoría como objetivo.
let items = [ {'name':"A",'category':"a"}, {'name':"B",'category':"b"}, {'name':"C",'category':"c"} ] let target; console.log(items.filter( item => { if(target==undefined){ return true; } return (item['category']===target); }));Puede crear una función que tome una lista de elementos y un target opcional. En caso de que se haya pasado un objetivo, devuelva la lista filtrada; de lo contrario, devuelva la lista en sí:
const filterByCategoryIfTargetProvided = (arr = [], target) => target ? arr.filter(({ category }) => category === target) : arr; const items = [ {'name':"A",'category':"a"}, {'name':"B",'category':"b"}, {'name':"C",'category':"c"} ]; console.log( filterByCategoryIfTargetProvided(items) ); console.log( filterByCategoryIfTargetProvided(items, 'a') );Esta función requiere una matriz y el objeto que desea filtrar. Puede usarlo para filtrar el objeto según la categoría, el nombre o cualquier otra clave de objeto. Gracias.
let items = [ { name: "A", category: "a" }, { name: "B", category: "b" }, { name: "C", category: "c" }, ]; const filterItems = (arr, itemToFilter) => { if (itemToFilter) { const keyToFilter = Object.keys(itemToFilter); const filteredItem = arr.filter((eachItem) => { return eachItem[keyToFilter] === itemToFilter[keyToFilter]; }); return filteredItem; } else { return arr; } }; console.log(filterItems(items, { category: "a" }));Puede filtrar por ninguna categoría o con la categoría.
const filter = (data, category) => data.filter(o => !category || o.category === category), items = [{ name: "A", category: "a" }, { name: "B", category: "b" }, { name: "C", category: "c" }]; console.log(filter(items)); console.log(filter(items, 'a')); .as-console-wrapper { max-height: 100% !important; top: 0; }