使用 javascript 过滤方法从列表中获取所有项目

Get all items from a list using javascript filter method

我想从列表中过滤项目。当某个类别将作为值提供给目标变量时,过滤方法应该 return 只有具有该类别的项目。但是当没有提供类别时,我想获得所有类别的项目,而不考虑类别。在我的下面的代码中工作正常,但我想要更清晰的逻辑来在没有提供类别作为目标时过滤项目。

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);
}));

您可以创建一个接受项目列表和可选 target 的函数。如果目标被传递 return 过滤列表,否则 return 列表本身:

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') );

您可以不按类别过滤,也可以按类别过滤。

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; }

此函数需要一个数组和您要过滤的对象。您可以使用它根据类别、名称或任何其他对象键来过滤对象。谢谢

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" }));