javascript - Vue js:如何过滤嵌套数组中的每个标签都包含在用户输入标签数组中的数组?
问题描述
如果搜索标签数组中的任何一个标签包含在项目的标签数组中,我有一个搜索函数来过滤数组。如果存在任何标签,而不是使用 some() 返回 true,如果每个标签都存在,我如何返回true?
这是我所拥有的一个示例(有效)。如果我搜索“tag1;” 和“tag3;”,它返回所有 3 个项目。我想要的只是 item1 和 item2 返回 true。
<template>
<div class="right-content">
<div class="nav-margin">
<p>Filter array</p>
<input type="text" v-model="searchTag" @keyup="addSearchTag" />
<div class="spacer-20"></div>
<div v-for="searchTag in searchTags" :key="searchTag" class="items">{{searchTag}}</div>
<div class="spacer-20"></div>
<div v-for="item in searchedItems" :key="item.name" class="items">
<div class="title">{{item.name}}:</div>
<div v-for="tag in item.tags" :key="tag" class="tag">{{tag}}</div>
</div>
</div>
</div>
</template>
<script>
import { ref } from "@vue/reactivity";
import { computed } from '@vue/runtime-core';
export default {
name: "TemplatesDash",
setup() {
const searchTag = ref("");
const searchTags = ref([])
const filteredItems = ref(null)
let items = [
{ name: "item1", tags: ["tag1;", "tag2;", "tag3;"] },
{ name: "item2", tags: ["tag1;", "tag3;"] },
{ name: "item3", tags: ["tag2;", "tag3;"] },
];
const addSearchTag = (e) => {
if (e.key === ";" && searchTag.value) {
if (!searchTags.value.includes(searchTag.value)) {
searchTags.value.push(searchTag.value);
}
searchTag.value = "";
}
};
const searchedItems = computed(() => {
filteredItems.value = items;
if (searchTags.value.length) {
filteredItems.value = filteredItems.value.filter((item) => {
return item.tags.some(
(r) => searchTags.value.indexOf(r) !== -1
);
});
}
return filteredItems.value
});
return { searchTag, searchedItems, searchTags, addSearchTag, };
},
};
</script>
我是 javascript 的新手,所以任何帮助或指向正确的方向都会很棒。
谢谢
解决方案
我相信.every() 函数在这里可能有用。当您在 searchedItems 计算函数中过滤项目时,返回对 searchTags 的 .every() 调用,返回 item.tags .includes()是否每个 searchTag 数组成员。
const searchedItems = computed(() => {
filteredItems.value = items;
if (searchTags.value.length) {
filteredItems.value = filteredItems.value.filter((item) => {
return searchTags.value.every(t => item.tags.includes(t));
});
}
return filteredItems.value
});
你的 javascript 有了一个很好的开始!希望这可以帮助!
推荐阅读
- ruby-on-rails - Rails 5 - 活动存储 - 变体 - 例外:“#
Rails 5.2.0(作为 API)
/config/application.rb
config.active_storage.variant_processor = :vips
- javascript - 格式化 Imagemapster 选择
- javascript - 使用 NodeJS 读取目录中的所有文件
- node.js - npm vs 节点版本号
- javascript - Angular:使用颜色选择器输入更改颜色 css 变量
- javascript - 使用 AngularJs 和 PHP 发布有效负载并接收响应
- c# - 使用 lambda 在类列表中查找类列表
- python - Jupyter notebook is extremely slow when re-running cells
- php - Symfony:使用全局变量
- business-objects - 使用 API 在 Business Objects BI4 中的对象后面获取 SQL 查询