【问题标题】:Filter by array of objects using values pair使用值对按对象数组过滤
【发布时间】:2026-01-23 22:20:02
【问题描述】:

我有一个对象数组

var array = [
 {id: true, category: "cat1", name: "test1"},
 {id: true, category: "cat2", name: "test2"},
 {id: true, category: "cat3", name: "test3"},
 {id: true, category: "cat4", name: "test4"},
 {id: true, category: "cat5", name: "test5"}
]

如果有匹配的数组值如何过滤?

这是我的脚本:

let filtered = this.array.filter((array) => {
    return array.name.toLowerCase().includes(this.keyword.toLowerCase());
});

var category = [];

if(category.includes("All")) {
   return filtered;
} else {
   return filtered.filter((array) => {
     var keys = Object.keys(array);
     var matchFilter = false;
     category.forEach((key) => {
       if(array[key] === true) {
         matchFilter = true;
       }
     });
     return matchFilter;
   });
}

然后我在前端有一个复选框来存储变量 category 的值

<input type="checkbox" v-model="selectedCategory" value="All">
<input type="checkbox" v-model="selectedCategory" value="1">
<input type="checkbox" v-model="selectedCategory" value="2">
<input type="checkbox" v-model="selectedCategory" value="3">
<input type="checkbox" v-model="selectedCategory" value="4">
<input type="checkbox" v-model="selectedCategory" value="5">

现在,如果检查的值与我的对象数组的 ID 匹配,它只会返回我。我的预期输出是也按类别或名称的值对其进行过滤。

【问题讨论】:

  • 什么包含filtered
  • 是搜索的过滤功能。
  • 添加更多信息时请edit your question
  • 刚刚编辑了问题
  • 这里没有足够的信息。 category 如何/何时获得任何值? product 是什么?目前尚不清楚选择任何复选框的结果应该是什么

标签: javascript vue.js


【解决方案1】:

如果我理解正确,你可以使用Array.protoype.filter 来完成这个确切的任务。

var array = [
 {id: true, category: "cat1", name: "test1"},
 {id: true, category: "cat2", name: "test2"},
 {id: true, category: "cat3", name: "test3"},
 {id: true, category: "cat4", name: "test4"},
 {id: true, category: "cat5", name: "test5"},
]

const getByCateg = (arr, categ) => {
  if (categ === "All") return array;
  return arr.filter((item) => item.category === categ);
}

console.log(getByCateg(array, "All"), getByCateg(array, "cat2"))

【讨论】:

  • 感谢您的努力,但这不是我想要的。