现在有这么个需求, 在一个 josn 中找到 name 所在位置
[
{
大量各种其他不相关属性,
children: [
{
name: '',
大量各种其他不相关属性
}
]
},
...
]
怎么去通过模糊匹配 name 去获得这两层的 index
怎么让获得 index 的时间尽量短? 因为需要查找的 name 是通过 input 输入的, 一边输入, 一边不停去匹配查找!
目前已经掉了很多头发, 请各位帮帮我埼玉!
ps: 如果需求没有表达明确, 请帮忙指正哦
1
AreYou0k 2019-08-02 17:15:52 +08:00
webWoker 好像可以
|
2
getBugTOyou OP @AreYou0k webWorker 只是提供了个线程呀, 关键是计算耗时!
|
3
napsterwu 2019-08-02 17:23:53 +08:00
用了 map 和 reduce ?
|
4
zachgenius 2019-08-02 17:27:18 +08:00
大量数据交给前端处理....总觉得是后端偷懒呢...
|
5
oatw 2019-08-02 17:27:26 +08:00
貌似是一道算法题呀。输入的事件用 setTimeout 处理,几百条乘以几百条那就是最大 10 万条?!
先快速排序再二分查找? |
6
wszgrcy 2019-08-02 17:27:39 +08:00 via Android
上堆,(嗯,应该没错)尽量别递归
|
7
rain0002009 2019-08-02 18:04:57 +08:00 1
|
8
yhxx 2019-08-02 18:29:27 +08:00
转成字符串,然后查相邻的{}或者[]的 index ?
|
9
loading 2019-08-02 18:40:15 +08:00 via Android
这是一个 js 的题目,node.js 后端也会遇到。
|
10
TrickWu 2019-08-02 18:43:54 +08:00
按照我个人理解,这种上 M 的数据应该是后端检索来做的,前端浏览器的速度怎么可能跟服务器比呢。
|
11
nigelvon 2019-08-02 18:48:54 +08:00
没毛病确实应该后端做,数据量不大后端可以翻转一下把 name 的值变成 key 这样速度比较快,如果很大可以借助其他工具做索引来搜索。
|
12
nondanee 2019-08-02 20:10:14 +08:00
应该要 parse 的吧?那可以用 reviver 建个索引
``` let mapping = {} JSON.parse(responseText, (k, v) => { if(!isNaN(k)){ v.i = k } if(typeof(v) == "object" && 'children' in v){ v.children.forEach((child, i) => mapping[child.name] = v.i + '-' + i) } return v }) ``` |
13
ChefIsAwesome 2019-08-02 21:12:52 +08:00
“因为需要查找的 name 是通过 input 输入的, 一边输入, 一边不停去匹配查找!”
这肯定后端搞啊,前端搞这个直接卡死了。 |
14
ipwx 2019-08-02 22:03:06 +08:00 via Android
前端对数据建树或其他合适的数据结构,后端新的数据增量给出,那么前端后续就能更新这个数据结构而不是全部重建。数据结构请查询各种模糊匹配算法
|
15
ipwx 2019-08-02 22:03:43 +08:00 via Android
我觉得这个前段做挺有道理的,减轻服务器压力。反正和数据安全性关系不大
|
16
getBugTOyou OP @rain0002009 感谢, 很好用! 开始用这个库了
|