前端如何去快速处理比较大的数据? 头发都快薅光了

2019-08-02 17:11:03 +08:00
 getBugTOyou

现在有这么个需求, 在一个 josn 中找到 name 所在位置

[
  {
    大量各种其他不相关属性,
    children: [
      {
        name: '',
        大量各种其他不相关属性
      }
    ]
  },
  ...
]

怎么去通过模糊匹配 name 去获得这两层的 index

  1. 数据很大, 有几 M;
  2. 第一层与第二层可能都 0 有几百条;
  3. 实时更新的, 所以无法通过先初始化一个 hash 表来查 Index;

怎么让获得 index 的时间尽量短? 因为需要查找的 name 是通过 input 输入的, 一边输入, 一边不停去匹配查找!

目前已经掉了很多头发, 请各位帮帮我埼玉!

ps: 如果需求没有表达明确, 请帮忙指正哦

3506 次点击
所在节点    算法
16 条回复
AreYou0k
2019-08-02 17:15:52 +08:00
webWoker 好像可以
getBugTOyou
2019-08-02 17:19:03 +08:00
@AreYou0k webWorker 只是提供了个线程呀, 关键是计算耗时!
napsterwu
2019-08-02 17:23:53 +08:00
用了 map 和 reduce ?
zachgenius
2019-08-02 17:27:18 +08:00
大量数据交给前端处理....总觉得是后端偷懒呢...
oatw
2019-08-02 17:27:26 +08:00
貌似是一道算法题呀。输入的事件用 setTimeout 处理,几百条乘以几百条那就是最大 10 万条?!

先快速排序再二分查找?
wszgrcy
2019-08-02 17:27:39 +08:00
上堆,(嗯,应该没错)尽量别递归
rain0002009
2019-08-02 18:04:57 +08:00
所以你们服务端是把所有的数据都给你了 然后叫你自己做模糊搜索?
你们服务端 666 啊
搜了一下 还真有模糊搜索的轮子
https://fusejs.io/
yhxx
2019-08-02 18:29:27 +08:00
转成字符串,然后查相邻的{}或者[]的 index ?
loading
2019-08-02 18:40:15 +08:00
这是一个 js 的题目,node.js 后端也会遇到。
TrickWu
2019-08-02 18:43:54 +08:00
按照我个人理解,这种上 M 的数据应该是后端检索来做的,前端浏览器的速度怎么可能跟服务器比呢。
nigelvon
2019-08-02 18:48:54 +08:00
没毛病确实应该后端做,数据量不大后端可以翻转一下把 name 的值变成 key 这样速度比较快,如果很大可以借助其他工具做索引来搜索。
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
})
```
ChefIsAwesome
2019-08-02 21:12:52 +08:00
“因为需要查找的 name 是通过 input 输入的, 一边输入, 一边不停去匹配查找!”
这肯定后端搞啊,前端搞这个直接卡死了。
ipwx
2019-08-02 22:03:06 +08:00
前端对数据建树或其他合适的数据结构,后端新的数据增量给出,那么前端后续就能更新这个数据结构而不是全部重建。数据结构请查询各种模糊匹配算法
ipwx
2019-08-02 22:03:43 +08:00
我觉得这个前段做挺有道理的,减轻服务器压力。反正和数据安全性关系不大
getBugTOyou
2019-08-05 11:01:52 +08:00
@rain0002009 感谢, 很好用! 开始用这个库了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/588583

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX