【发布时间】:2019-01-04 23:48:39
【问题描述】:
目标
编辑 - 使问题更清晰
创建可根据项目标签缩小搜索结果范围并仅返回具有指定标签的项目的搜索。 示例: ['green'] 将给我所有绿色的项目,包括大、中和小(因为没有指定尺寸),['green','big'] 将只给我绿色和大的项目。
我遇到了一个场景。为了简化事情,我有以下数据
items: [
{ title: 'prod1', tags: [{ value: 'green' }, { value: 'big' }] },
{ title: 'prod2', tags: [{ value: 'blue' }, { value: 'small' }] },
{ title: 'prod3', tags: [{ value: 'yellow' }, { value: 'medium' }, { value: 'big' }] },
{ title: 'prod4', tags: [{ value: 'green' }, { value: 'big' }, { value: 'medium' }] },
]
我的搜索字段是一个多选输入,带有预定义的标签(如本网站中的标签字段)
该字段的值作为数组输出。如果我选择green,则输出为 ['green']
如果我选择 green 和 big 它输出 ['green', 'big']
如果我选择标签green 我应该得到这些结果
{ title: 'prod1', tags: [{ value: 'green' }, { value: 'big' }] },
{ title: 'prod4', tags: [{ value: 'green' }, { value: 'big' }, { value: 'medium' }] },
如果我选择标签 green 和 medium 我会得到这些结果,因为 prod4 是唯一一个带有标签 green 和 medium 的标签
{ title: 'prod4', tags: [{ value: 'green' }, { value: 'big' }, { value: 'medium' }] },
如果我选择 green 和 big 我应该得到
{ title: 'prod4', tags: [{ value: 'green' }, { value: 'big' }, { value: 'medium' }] },
{ title: 'prod1', tags: [{ value: 'green' }, { value: 'big' }] }
如果没有选择,则输出所有项目
原始问题
I ran into a scenario. To simplify things, i have the following data
items: [
{title: 'one', desc: 'this is one', tags: [{value: 'mytag'},{value: 'one'}]},
{title: 'two', desc: 'this is two', tags: [{value: 'mytag'},{value: two}]},
{title: 'three', desc: 'this is three', tags: [{value: 'mytag'},{value: 'three'},{value: 'common'}]},
{title: 'four', desc: 'this is four', tags: [{value: 'mytag'},{value: 'four'},{value: 'common'}]},
]
我有一个接受标签的搜索输入元素,输入的值是一个数组。输入的值为['tag','two']
我似乎无法弄清楚如何按标签过滤我的项目。
如果我按标签二(['two'])搜索,我应该得到一个返回
filteredItems: [
{title: 'two', desc: 'this is two', tags: [{value: 'mytag'},{value: two}]},
]
如果我搜索两个,常见的 (['two','common']) 我应该得到一个返回
filteredItems: [
{title: 'three', desc: 'this is three', tags: [{value: 'mytag'},{value: 'three'},{value: 'common'}]},
{title: 'four', desc: 'this is four', tags: [{value: 'mytag'},{value: 'four'},{value: 'common'}]},
]
我尝试查看一些示例,发现一些仅过滤顶级项目而不是嵌套数组的示例。
谢谢 :) 顺便用javascript,可以用lodash。
我的游乐场 JS 文件:
const _ = require('lodash')
let items = [
{
name: 'hello',
tags: [
{ value: 1 },
{ value: 2 },
]
},
{
name: 'bye',
tags: [
{ value: 2 },
{ value: 4 },
]
}
]
items.map(item =>{
let test = _.includes(item.tags, 2)
console.log(test)
// returns false, false
})
【问题讨论】:
-
为什么搜索
['two','common']不包括two对象? -
这是搜索下拉列表(使用语义 ui)列表吐出其值的方式.. 带有字符串数组..
-
在第一个代码块中,您没有使用字符串文字
'two',而是使用该名称的变量。 -
所以?不管格式如何,为什么在搜索
two时没有匹配到two对象?我没听懂 -
two的值是多少?你在哪里定义它?
标签: javascript arrays object filter