前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何方便的搜索JS复杂数组?

如何方便的搜索JS复杂数组?

作者头像
dys
发布2018-04-03 18:03:37
1.5K0
发布2018-04-03 18:03:37
举报
文章被收录于专栏:性能与架构

例如下面这个稍微复杂一点的数组 [ { IceCream: ['mint', 'chocolate'], Fruit: 'banana' }, { IceCream: ['candy', 'brownie'], Fruit: 'apple' }, { IceCream: ['cake', 'strawberry'], Fruit: 'orange' } ] 假设有几个需求: 1. 查找 IceCream 中包含 'ca' 的项 2. 查找 Fruit 以 'app' 开头的项 3. 查找 IceCream 中完全匹配 'mint' 的项 如果自己写代码实现的话,会麻烦一些,可以使用 match-sorter 这个插件完成这类的数组搜索工作 match-sorter 可以方便的实现对复杂数组的搜索,并对搜索结果按照匹配度进行排序 基本用法 先用一个简单的数组了解 match-sorter 的用法 const list = ['hi', 'hey', 'hello', 'sup', 'yo'] matchSorter ( list, 'y' ) 使用 matchSorter 对数组 list 进行查找,找包含 'y' 的项 结果: ['yo', 'hey'] 这个结果是经过排序的,原数组中 'hey' 在 'yo' 的前面,但查找 'y' 时,'yo' 的匹配度更高,因为他的第一个字符就是 'y',所以排在了前面 示例 先安装,match-sorter 是通过 npm 发布的,使用 npm 在自己的项目目录下安装 npm install --save match-sorter 然后以开头的数组和需求为例 引入包和定义数组 const matchSorter = require('match-sorter')

const foods = [ {IceCream: ['mint', 'chocolate'], Fruit: 'banana'}, {IceCream: ['candy', 'brownie'], Fruit: 'apple'}, {IceCream: ['cake', 'strawberry'], Fruit: 'orange'} ]; 1)查找 IceCream 中包含 'ca' 的项 var result = matchSorter(foods, 'ca', {keys: ['IceCream']}); console.log(result); 执行结果 [ { IceCream: [ 'candy', 'brownie' ], Fruit: 'apple' }, { IceCream: [ 'cake', 'strawberry' ], Fruit: 'orange' }, { IceCream: [ 'mint', 'chocolate' ], Fruit: 'banana' } ] 参数中的 keys 指定了要查找的项,是个数组,可以指定多项,例如 keys: ['IceCream', 'Fruit']

2)查找 Fruit 以 'app' 开头的项 var result = matchSorter(foods, 'app', {

keys: ['Fruit'], threshold: matchSorter.rankings.STARTS_WITH

}); console.log(result); 执行结果 [ { IceCream: [ 'candy', 'brownie' ], Fruit: 'apple' } ] 这里除了 keys 还增加了 threshold,他用来指定匹配的类型 matchSorter.rankings.STARTS_WITH 是查找以给定值为开头的项

3)查找 IceCream 中完全匹配 'mint' 的项 需求1中不是精确匹配,只要包含 c 和 a 就可以 现在需要完全匹配 'mint' var result = matchSorter(foods, 'mint', {

keys: ['IceCream'], threshold: matchSorter.rankings.EQUALS

}); console.log(result); keys 指定对 IceCream 搜索 thresholdEQUALS 指定使用完全匹配的方式 执行结果 [ { IceCream: [ 'mint', 'chocolate' ], Fruit: 'banana' } ]

4)嵌套 Key 看一个对象嵌套的情况,例如 const nestedObjList = [ {name: {first: 'Janice'}}, {name: {first: 'Fred'}}, {name: {first: 'George'}}, {name: {first: 'Jen'}}, ] 想查找 first 中包含 'j' 的,用法: matchSorter(nestedObjList, 'j', {keys: ['name.first']}) 匹配模式 上面用到了 EQUALSSTARTS_WITH,还有几个其他匹配模式 WORD_STARTS_WITH 如果某项的值是多个单词,只要其中一个词是以给定字符串开头的,就匹配成功 例如 'Sou' 匹配 'South Korea' 或者 'Earth South' 如果使用 STARTS_WITH,则只会匹配 'South Korea' CONTAINS 包含给定值时匹配成功,例如 'ham' 匹配 'Bahamas' ACRONYM 匹配首字母,例如 'us' 匹配 'United States' match-sorter 在大数组匹配上很方便,有此需求时可以仔细了解下 项目地址: https://github.com/kentcdodds/match-sorter

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2016-09-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 JAVA高性能架构 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档