`
pipi709
  • 浏览: 24414 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

JavaScript数组的快速克隆(slice()函数)和数组的排序、乱序和搜索(sort()函数)

    博客分类:
  • js
阅读更多

JavaScript中对变量的操作都是通过引用方式,而对数组也一样。
前两天想要对一个数组进行复制,一直苦于找不到办法(遍历的方法俺是绝对不采用的)
无意中拿起《JavaScript权威指南》翻了翻数组的操作函数,发现了slice()函数。
slice()原来是用来截取数组中的一部分,这里我用它来复制数组,它的格式如下:
array.slice(start, end)
如果省略了end参数,则切分的数组包含从start开始到数组结束的所有元素。
现在要用它来复制数组,就一行,呵呵:
var newArray=oldArray.slice(0);

所有这些功能,用一个sort()就可以完成了。
1. 排序:
默认的sort()按字符编码排序的:

<script type="text/javascript"> <!-- var testArray=[3,324,5345,6546,134,5654,665]; testArray.sort(); alert(testArray); //--> </script>


现在要让它按照数值大小排序:

<script type="text/javascript"> <!-- var testArray=[3,324,5345,6546,134,5654,665]; testArray.sort(function(a,b){return a-b;}); alert(testArray); //--> </script>


只要传递一个比较函数给sort就可以了,如果比较函数的值小于0,则表示a必须出现在b前面,否则在b后面。
2. 乱序:
让比较函数随机传回-1或1就可以了:

<script type="text/javascript"> <!-- var testArray=[1,2,3,4,5,6,7,8,9,10,22,33,55,77,88,99]; testArray.sort(function(){return Math.random()>0.5?-1:1;}); alert(testArray); //--> </script>

3. 搜索:
用sort()来玩搜索还蛮新鲜的,呵呵,看看是怎么玩的吧。
我现在要把数组里含有字母'a'的元素全部找出来,如果没有sort(),似乎只能用遍历了,遍历的效率…那个叫恐怖啊!!具体做法如下:

<script type="text/javascript"> <!-- var testArray=['df', 'rtr', 'wy', 'dafd', 'dfs', 'wefa', 'tyr', 'rty', 'rty', 'ryt', 'afds', 'wer', 'te']; testArray.sort(function(a,b){return a.indexOf('a')==-1?1:-1;}); alert(testArray); //--> </script>

这样就把数组中含有字母'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] 相比,前者会更快的取到值!(如果不信可以自己去编个相关例子试试看)。也就是说当遍历数组时,每次取值的所需时间会随着下标值的增加而增大。

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/zhangw428/archive/2009/03/26/4027438.aspx

分享到:
评论

相关推荐

    JavaScript数组的快速克隆(slice()函数)和数组的排序、乱序和搜索(sort()函数)

    前两天想要对一个数组进行复制,一直苦于找不到办法(遍历的方法俺是绝对不采用的) 无意中拿起《JavaScript权威指南》翻了翻数组的操作函数,发现了slice()函数。 slice()原来是用来截取数组中的一部分,这里我用...

    Javascript数组及其操作

    12. `sort()`:对数组进行排序 13. `splice()`:删除、替换或添加数组元素 这些方法可以帮助开发者更方便地操作数组,实现各种数据处理和计算任务。 多维数组 Javascript 也支持多维数组,例如: `var myArray =...

    JavaScript数组操作函数汇总

    JavaScript数组操作函数是编程中非常基础且重要的部分,它们提供了对数组进行各种操作的方法,包括添加、删除、合并以及转换等。以下是对标题和描述中提及的数组操作函数的详细说明: 1. **push()**: `push()` 函数...

    Javascript数组函数大全

    ### JavaScript 数组函数详解 #### 1. `shift` 方法 `shift` 方法用于移除数组的第一个元素,并返回被移除的元素。如果数组为空,则返回 `undefined`。 ```javascript let a = [1, 2, 3, 4, 5]; let b = a.shift();...

    JavaScript数组.pdf

    由于提供的文件内容中包含大量的乱码和无法识别的字符,无法直接从中提取有关JavaScript数组的知识点。不过,我们可以根据文件标题“JavaScript数组.pdf”提供的信息,详细解释JavaScript数组相关的知识点。下面将对...

    javascript中数组、对象

    文档"Javascript数组操作整理.doc"可能包含了对数组常见操作的详细总结,如遍历方法(`for`循环、`forEach`、`map`等)、查找方法(`indexOf`、`find`、`filter`等)、排序方法(`sort`)、转换方法(`concat`、`...

    Javascript数组函数库.docx

    JavaScript中的数组函数库是开发过程中不可或缺的一部分,它们提供了丰富的功能,用于操作和处理数组对象。以下是一些主要的数组函数的详细说明: 1. `shift()`: 这个方法会删除数组的第一个元素,并返回被删除的...

    Javascript数组操作整理.rar

    - `sort()`:对数组的元素进行排序。默认按字母顺序。 7. 查找数组元素: - `indexOf()`:查找指定元素在数组中的位置,返回索引,找不到则返回-1。 - `lastIndexOf()`:从后向前查找指定元素的索引。 8. 空...

    javascript的数组和常用函数详解_.docx

    JavaScript数组提供了许多内置方法,如`push()`(向数组末尾添加元素)、`pop()`(移除并返回数组最后一个元素)、`shift()`(移除并返回数组第一个元素)、`unshift()`(向数组开头添加元素)、`slice()`(提取...

    PHP 数组的常用函数

    7. 排序数组 - `sort()`: 对数值数组进行升序排序。 - `rsort()`: 对数值数组进行降序排序。 - `asort()`: 对关联数组按值进行升序排序,保留键。 - `arsort()`: 对关联数组按值进行降序排序,保留键。 - `ksort()`:...

    javaScript中slice函数用法实例分析

    javaScript 中的 slice 函数,对于array对象的slice函数,返回一个数组的一段。(仍为数组) arrayObj.slice(start, [end])  参数: arrayObj,必选项。一个 Array 对象。  start,必选项。arrayObj 中所指定的...

    javascript 数组排序

    在JavaScript中,数组对象提供了一个内置的方法`sort()`,可以对数组元素进行排序。这篇博文将深入探讨`sort()`方法的工作原理及其在实际开发中的应用。 首先,`sort()`方法会按照字母顺序对数组中的元素进行排序,...

    JavaScript数组对象JSON学习笔记

    通过以上内容的学习,我们可以了解到 JavaScript 数组提供了丰富的操作方法,包括数组的创建、访问元素、数组合并、排序等操作。此外,JSON 格式的引入使得数据的传输和解析变得更加简单高效,是现代 Web 开发中不可...

    JavaScript对象数组如何按指定属性和排序方向进行排序

    本文将详细讲解如何根据指定的属性和排序方向对JavaScript对象数组进行排序。 首先,了解JavaScript数组的`sort()`方法。`sort()`方法允许我们对数组元素进行原地排序,它接受一个可选的`compareFunction`参数,...

    javascript Array数组对象的扩展函数代码

    标题提到的“javascript Array数组对象的扩展函数代码”就是关于如何给Array对象添加额外的方法,以实现更便捷的操作。描述中提到了“去除字符串空格”和“数组排序”,这些都是常见的数组操作。 首先,我们来讨论...

    javaScript数组操作笔迹

    在JavaScript编程语言中,数组(Array)是一种非常基础且重要的数据结构,用于存储多个值在一个单一的变量中。数组操作是任何开发人员在日常编码中不可或缺的一部分,掌握各种数组方法能够极大提高代码效率和可读性...

    Javascript数组Array基础介绍_.docx

    Javascript 数组 Array 基础介绍 在 JavaScript 中,数组是一种特殊的对象,它们拥有独特的特性。...我们需要了解如何创建数组、检测对象是否为数组、数组的长度和数组遍历等知识点,以便更好地使用数组。

    js中数组(Array)的排序(sort)注意事项说明.docx

    在JavaScript中,数组的`sort()`方法是一个非常重要的功能,用于对数组的元素进行排序。然而,使用这个方法时需要注意一些细节,以确保它能够按照预期的方式工作。下面是对`sort()`方法的详细说明和注意事项。 1. *...

    Javascript中克隆一个数组的实现代码

    数组克隆是数组操作中的一项基础技能,它在实际编程中应用广泛,如需要修改原数组副本而不影响原数组,或者是在函数参数传递中需要一个数组的副本时。 对于数组的克隆,在JavaScript中有多种方法可以实现: 1. ...

    javascript数组克隆简单实现方法

    总结来说,数组克隆在JavaScript中是一个很实用的功能,通过简单的`concat`和`slice`方法可以实现数组的浅拷贝。对于更复杂的深克隆需求,则需要借助其他技巧和方法来实现。不过,了解并掌握浅克隆的使用场景和限制...

Global site tag (gtag.js) - Google Analytics