javascript 数组特性鉴赏一

创建数组

如果你习惯了用 new 来实例化对象的形式,那么在js中一定会疑惑,可选的参数数量代表的意义截然不同。

new
Array(size);//传一个参数的时候分两种情况,size是正整数时代表数组的长度;size是其它非数字类型代表的是初始化有一个元素的数组;非正整数的尝试豪无意义

new Array(element1, element2[, ...]);//两个以上的参数代表数组元素列表

实际更常用的是: var arr = [];//使用字面量的形式直接定义

数组长度

js数组的长度属性length不是只读的属性,你可以通过修改一个数组的length值来控制其元素的个数。控制元素的策略是当length设定值比当前实际值小的时候,会舍去多余的元素;当设定值大于当前实际值的时候,会填充多个空值(undefined),这个特性使得在修改数组大小的时候非常方便。

var arr = [1,2,3,4,5];

arr.length = 3;//此时arr:[1,2,3]

arr.length = 6;//此时arr:[1,2,3,,,]

数组拼接 concat

多个数组的拼接方法是 concat ,调用方式为 array1.concat(item1, item2[,
...]),其中item既可以是数组又可以是其它值,item若为数组,则展开其值和array1内容拼接到一起,其它则直接拼接。

单从字面上看会误以为所有的item都会拼接到array1的末尾,但实际上该方法并不修改array1的值,而是将array1作为数组片段和其它提供的item片段拼接后返回一个新的数组。

如果想要达到修改array1的目的,只需一个赋值操作即可。array1 = array1.concat(item1, item2[, ...]);

数组元素的连接
join

join 方法返回按指定分隔符分隔,连接到一起的所有元素,默认分隔符为逗号。调用方式为
arr.join(separator),若元素当中的值为 null、undefined
或者空字符串的值在join后都当作空字符串处理

移除数组第一个元素
shift

arr.shift() 方法移除第一个元素,返回该元素,数组为空返回 undefined。

移除数组末尾元素
pop

arr.pop() 方法移除数组中最后一个元素,返回该元素,数组为空返回 undefined。

添加新元素到数组开始
unshift

unshift插入指定元素到数组的开始位置,返回该数组。

arr.unshift(item1, item2[, ...]),可以一次按参数序列的顺序插入多个值,若item为数组不会被展开

添加新元素到数组末尾
push

push方法将新元素添加到数组中,返回数组的新长度值。

arr.push(item1, item2[, ...]),可以一次按参数序列的顺序添加多个值,若item为数组不会被展开

反转元素的顺序
reverse

arr.reverse() 方法将数组元素位置进行反转,方法执行后原数组会被修改。

数组片段截取
slice

arr.slice(start, [end]) 方法返回数组的一个截取片段。从数组下标 start 开始到 end
结束,不包括end

var arr = [0,1,2,3,4,5,6];

arr.slice(2, 6);//[2,3,4,5]

 

start 和 end 可以为负值,取值的意义为与数组长度 length 之和即 start+length 或者
end+length 。

arr.slice(-5, 6);//[2,3,4,5] 可以理解为从倒数第5个至正数第6个

arr.slice(2, -1);//[2,3,4,5] 可以理解为从第2个至倒数第1个

end 省略时代表截取到数组的末尾, start 和 end 都省略时返回一个arr的拷贝。

arr.slice(0);//[0,1,2,3,4,5,6],起始索引 0 可省略

最终取值 start 小于 end。

arr.slice(6,
3);//[],使用slice截取数组片段之前一定要验证start<end,否则这种返回结果会产生非常隐蔽的bug

数组中移除或插入元素
splice

arr.splice(start, deleteCount, item1, item2[, ...]),从数组中 start 下标开始移除 N
个元素,如果需要可以在移除的元素位置上插入新元素列表,返回值是一个由被移除的元素组成的数组。

当只插入新元素时,设定 deleteCount 值为 0
即可
该方法会动态改变原数组内容。

 

 

数组元素排序
sort

 

arr.sort(sortFunction),可选的排序方法sortFuction接受两个数组元素作为参数,对数组的元素进行排序,返回排序后的数组,该方法会动态改变数组内容。

不提供排序方法时数组中的元素按照ASCII字符顺序升序排列

[‘1‘,1,0,2,‘abc‘,‘aba‘].sort(); //返回[
0, ‘1‘, 1, 2, ‘aba‘, ‘abc‘ ]

若提供了sortFunction(x, y) 则必须返回以下值之一:

  • 负值,如果所传递的第一个参数比第二个参数小。

  • 零,如果两个参数相等。

  • 正值,如果第一个参数比第二个参数大。

sortFunction 提供了一个比较两个任意类型数组元素大小的方法, 返回正数时则参数 x 会排在 y
的后边,返回负数时相反
,比对所有元素后完成排序。

既然排序依据的是该函数的返回值,那么具体的排序规则就可以灵活的计算。

纯数字型元素的数组排序:

[2, 6, 1, 4, 3, 5].sort(function(x, y){

return x - y;

});

//正序:[1, 2, 3, 4, 5, 6]

[2, 6, 1, 4, 3, 5].sort(function(x, y){

return y - x;

});

//倒序:[6, 5, 4, 3, 2]

排序方法的关键在于返回值的计算方式,所以对于非数字型的数组元素也可以方便的进行排序

[ {name: ‘jim‘, age: 12}, {name: ‘susan‘, age: 8}, {name:
‘jack‘, age: 14} ].sort(function(x, y){

return x.age - y.age;//按年龄正序

});

//[ { name: ‘susan‘, age: 8 }, { name: ‘jim‘, age: 12 }, { name:
‘jack‘, age: 14 } ]

javascript 数组特性鉴赏一,码迷,mamicode.com

时间: 2024-10-13 08:42:31

javascript 数组特性鉴赏一的相关文章

javascript数组特性

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content=

javascript高级特性

01_javascript相关内容02_函数_Arguments对象03_函数_变量的作用域04_函数_特殊函数05_闭包_作用域链&闭包06_闭包_循环中的闭包07_对象_定义普通对象08_对象_定义函数对象09_对象_内建对象10_原型_为函数对象增加属性或方法11_原型_利用函数对象本身重写原型12_继承_函数对象之间的继承13_继承_普通对象之间的继承 javascript高级特性(面向对象): * 面向对象:   * 面向对象和面向过程的区别:     * 面向对象:人就是对象,年龄\

Javascript面向对象特性实现封装、继承、接口详细案例——进级高手篇

Javascript面向对象特性实现(封装.继承.接口) Javascript作为弱类型语言,和Java.php等服务端脚本语言相比,拥有极强的灵活性.对于小型的web需求,在编写javascript时,可以选择面向过程的方式编程,显得高效:但在实际工作中,遇到的项目需求和框架较大的情况下,选择面向对象的方式编程显得尤其重要,Javascript原生语法中没有提供表述面向对象语言特性的关键字和语法(如extends.implement).为了实现这些面向对象的特性,需要额外编写一些代码,如下.

javascript数组去重算法-----3

1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>javascript数组去重算法-----3</title> 6 </head> 7 <body> 8 <script> 9 var arr = [1,1,2,2,3,2,2,3,3,1,1,4,4,5

JavaScript数组遍历map()的原型扩展

在 JavaScript 1.6 里,javascript 数组增加了几个非常有用的方法:indexOf.lastIndexOf.every. filter. forEach. map. some,其中前两个可以归为元素定位方法,而后面的几个则可以归为迭代(iterative)方法. 遗憾的是:这些新方法并非所有浏览器都支持,在这种情况下,我们就需要自己动手了,在这些介绍的文章中,我们同时提供了在不支持这些新特性的浏览器中的实现方法. 原生方法如下: 1 var mappedArray = ar

深入浅出 JavaScript 数组 v0.5

本文来自:http://www.cnblogs.com/googny/p/3747832.html 有一段时间不更新博客了,今天分享给大家的是一篇关于JS数组的,数组其实比较简单,但是用法非常灵活,在工作学习中应该多学,多用,这样才能领会数组的真谛. 以下知识主要参考<JS 精粹>和<JavaScript 高级程序设计>. 数组是一段线性分配的内存,它通过整数计算偏移并访问其中的元素.JavaScript 没有像此类数组一样的数据结构. 它提供了一些类数组特性的对象,它把数组的下标

你所不知道的JavaScript数组

你所不知道的JavaScript数组 相信每一个 javascript 学习者,都会去了解 JS 的各种基本数据类型,数组就是数据的组合,这是一个很基本也十分简单的概念,他的内容没多少,学好它也不是件难事情.但是本文着重要介绍的并不是我们往常看到的 Array,而是 ArrayBuffer. 我写的很多东西都是因为要完成某些特定的功能而刻意总结的,可以算是备忘,本文也是如此!前段时间一直在研究 Web Audio API 以及语音通信相关的知识,内容侧重于音频流在 AudioContext 各个

Javascript数组小结

Javascript数组小结 Javascript将指定的数字索引值转换成字符串--索引值1变成"1"--然后将其作为属性名来使用. 数组的length修改后,数组中大于设定值的元素将被删除 数组的添加删除: 1)  修改length属性值(删除) 2)  push.pop在数组的尾部进行插入.删除操作并返回操作元素:unshift和shift()在数组的首部进行插入.删除操作 3)  delete可以删除数组元素,但它不会改变数组的length属性,只是将该值置空. 4)  spli

JavaScript数组之概论

参考:http://www.cnblogs.com/dolphinX/p/3353590.html 数组是一段线性分配的内存,它是通过整数计算偏移量并访问其中的元素,所以数组是性能出色的数据结构,但JavaScript没有像此类数组一样的数据结构 作为替代,JavaScript提供一种拥有类数组(array-like)特性的对象. JavaScript本质是Object,多提供了一个length 属性 && 继承Array var a = { length:1 } var arr = Ar