javascript - 设计并实现一个combox(下拉选择框)
高洛峰
高洛峰 2017-04-11 12:51:38
[JavaScript讨论组]

1、combox内容可编辑,下拉区域可滚动(一共包含了10W条数据)
2、根据输入的内容做prefix匹配,展示匹配的可选择内容列表(要求提高匹配效率,考察算法能力,空间复杂度和时间复杂度)

下拉框可以通过模拟p来实现,但对于这么庞大的数据怎么处理,求解。。。
匹配的话,我想到的是正则匹配,但正则匹配也有问题,一般都是全文匹配,这样是不是一样会很好性能?

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回复(4)
巴扎黑

匹配:KMP 算法

前端性能:用 web workers 或者分块异步运算

=========

以上纯粹从面试题角度

如果是实际的问题,那么要考虑:

1.这些数据是不是有非英文字符,如果是,那么就最好用正则或者其他底层提供的方法而不是自己实现

2.数据是否有重复,重复的数据是否可以相互替代,如果是,那可以在控件加载先做一些删减

3.数据能不能做索引,如果可以,那么优先做索引

4.实际在做的时候这种大量的数据最好还是放在后端去做,前端 Ajax 加载

PHP中文网

10W 条数据的滚动,且不说会不会造成浏览器的性能问题,就这个事情本身来说,没有意义,谁会去滚动着在 10W 条数据里找要的那一条?一般情况下,会根据输入,选择最接近的一二十条列出来供选择,输入的内容越多就越精确,这就是“自动完成”。你要解决的问题就是如何选择要列出来的这一二十条数组。

个人觉得,可以按“快速查找”或者“二分查找”算法进行 prefix 匹配,自己实现这个算法还是有点难度。

用正则表达式是可行的,正则表达式不一定会匹配全文,比如 /^abc/ 匹配的就是开始的3个字母,只要这三个字母匹配上了,就算匹配成功,不会再去比较剩下的内容(也不知道跟谁比较了)

正则表达式实现应该比较简单,先试试再说,如果性能达不到,再想其它办法。

PHPz

这是携程的笔试题吗

大家讲道理

我的思路:

  1. 可以用<datalist>来实现,这样可以解决匹配prefix的问题和下拉的问题

  2. 关于数据量过大,当用户在未输入情况下进行下拉操作的时候,可以展示部分数据,然后拉到底部的时候动态追加option里面的内容

  3. 因为十万条比较多,所以我的想法是用ajax动态获取数据,但一次不要获取完

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号