繁体中文
设为首页
加入收藏
资讯中心
网络编程
数据库
脚本专栏
实用技巧
软件编程
网页制作
操作系统
经典网摘
网站技巧
免费资源
关于我们
文章搜索
主机租用
域名查询
基础知识
应用技巧
表单特效
广告代码
网页特效
黑客性质
页面导航:
首页
→
网络编程
→
JavaScript
→
基础知识
→ 正文内容
JavaScript数组的快速克隆(slice()函数)和数组的排序、乱序和搜索(sort()函数)
发布:dxy 字体:[
增加
减小
] 类型:转载
JavaScript中对变量的操作都是通过引用方式,而对数组也一样。
前两天想要对一个数组进行复制,一直苦于找不到办法(遍历的方法俺是绝对不采用的)
无意中拿起《JavaScript权威指南》翻了翻数组的操作函数,发现了slice()函数。
slice()原来是用来截取数组中的一部分,这里我用它来复制数组,它的格式如下:
array.slice(start, end)
如果省略了end参数,则切分的数组包含从start开始到数组结束的所有元素。
现在要用它来复制数组,就一行,呵呵:
var newArray=oldArray.slice(0);
所有这些功能,用一个sort()就可以完成了。
1. 排序:
默认的sort()按字符编码排序的:
点击运行可以看到效果:
[Ctrl+A 全选 提示:你可先修改部分代码,再按运行]
现在要让它按照数值大小排序:
点击运行可以看到效果:
[Ctrl+A 全选 提示:你可先修改部分代码,再按运行]
只要传递一个比较函数给sort就可以了,如果比较函数的值小于0,则表示a必须出现在b前面,否则在b后面。
2. 乱序:
让比较函数随机传回-1或1就可以了:
点击运行可以看到效果:
[Ctrl+A 全选 提示:你可先修改部分代码,再按运行]
3. 搜索:
用sort()来玩搜索还蛮新鲜的,呵呵,看看是怎么玩的吧。
我现在要把数组里含有字母'a'的元素全部找出来,如果没有sort(),似乎只能用遍历了,遍历的效率…那个叫恐怖啊!!具体做法如下:
点击运行可以看到效果:
[Ctrl+A 全选 提示:你可先修改部分代码,再按运行]
这样就把数组中含有字母'a'的元素全部放到数组前面啦,再经过一些简单的处理,就可以输出搜索结果了。
用slice来拷贝数组的确是一个很好的方法,而且实际上用得也会比较多,不过效率和遍历相比很难说优劣,因为我们谁也不知道js的slice是怎么实现的,不过推测起来应该要高效一些,更重要的是写起来简单多了。
第二个排序的方法确实很巧妙,这样就不用自己写洗牌算法了 ^^
至于第三个嘛...如果不用
正则
,一定要用Sort的话,一样是写起来简单很多,不过效率可能不见得比遍历高,要知道遍历并不意味着效率低,线性表单向搜索的遍历算法是O(N)复杂度的,Js的sort我猜用得是q-sort算法(如果用冒泡的话那就太寒酸了吧^^),所以起码是O(N*LogN)复杂度的(排序比搜索复杂也很容易理解),也就是说执行效率上用Sort匹配基本上肯定是要不如用直接的遍历来得快的。
数组拷贝我习惯用concat。如: newArr = oldArr.concat(),效率和slice(0)一样。
我测试过,slice或concat拷贝数组要比遍历快得多。
测试过程中我还发现另外一个特点,一个数组通过下标取值时,似乎也是通过类似遍历的的方法取值的。比方说数组arr有100万个数组元素,那么这两个表达式:i = arr[0] 和 i = arr[999999] 相比,前者会更快的取到值!(如果不信可以自己去编个相关例子试试看)。也就是说当遍历数组时,每次取值的所需时间会随着下标值的增加而增大。
Tags:
JavaScript数组的快速克隆(slice()函数)和数组的排序、乱序和搜索(sort()函数)
百度中搜索更多的关于
JavaScript数组的快速克隆(slice()函数)和数组的排序、乱序和搜索(sort()函数)
内容,或者
用Google搜索相关更多
浏览次数:
载入中...
打印本文
关闭本文
返回首页
0
顶一下
上一篇文章:
JavaScript方法和技巧大全
下一篇文章:
不懂JavaScript应该怎样学
文章评论
共有
位脚本之家网友发表了评论
我来说两句
同 类 文 章
JavaScript 参考教程
Javascript中eval函数的使用方法与示例
JavaScript中的History历史对象
javascript中的location用法简单介绍
JavaScript中Math对象使用说明
Javascript标准DOM Range操作全集
javascript 的面向对象特性参考
js不是基础的基础
javascript之函数直接量(function(){})()
DOM相关内容速查手册
最 近 更 新
JavaScript 中的事件教程
网页javascript精华代码集
整理的比较不错的JavaScript的方法和技巧
打开windows运行对话框的js
getElementById在任意一款浏览器中都可以
求得div 下 img的src地址的js代码
jQuery中文入门指南,翻译加实例,jQuery
splice slice区别
推荐一些非常不错的javascript学习资源站
你所要知道JS(DHTML)中的一些技巧
热 点 排 行
Javascript调试工具(下载)
htm调用JS代码
js之WEB开发调试利器:Firebug 下
JavaScript Try...Catch 声明的
javascript的对话框详解与参数
JavaScript For 循环
JavaScript的Function详细
完美解决JS中汉字显示乱码问题(
VB倒计时器和JS当前时间
pjblog修改技巧汇总
文章评论
共有 位脚本之家网友发表了评论我来说两句