JavaScript权威指南--数组Array
什么是数组
数组是值的有序集合。每一个值叫做元素,每一个元素在数组中有一个位置,用数字表示,称为索引。js数组是无类型的、动态的,也可能是稀疏的。每个数组都有length属性。数组最大能容纳4294967294(2^32 - 2)。数组继承自Array.prototype。里面的方法不仅对数组有效。类数组对象同样有效。
数组特性:自动更新length属性;length较小将截断数组;类属性为Array;从Array.prototype中继承属性。
创建数组
1)使用数组直接量
var arr = []; // 空数组
var a = 123;
var arr2 = [a, 1, '1', true,[{x : 2}]]; // 定义数组可使用对象,变量,常用数据类型
var arr3 = [1, , 3] // 中间省略的值直接被赋予undefined
2)调用构造函数Array
var arr4 = new Array(); // 空数组
var arr5 = new Array(10); // length,预分配数组空间
var arr6 = new Array(5, 5);
数组元素的读和写
var arr6 = new Array(3, 5);
console.log(arr6[1]); //
arr6[3] = 6;
console.log(arr6[3]); //
稀疏数组
稀疏数组是包含从0开始的不连续索引的数组。可以使用Array()构造函数或指定数组的索引值大于当前的数组长度来创建稀疏数组。(很少用,一般当做包含undefined值的非稀疏数组对待)
var a = [];
var a[10] = 12;
var a = new Array(5);
数组长度
a = [1, 2, 3]
console.log(a.length); // 3
Object.defineProperty(a, 'length', {writable:false}) // 只读
a.length = 0;
console.log(a.length); // 3
数组的增加和删除
1)增加
a = []; // 开始是空数组
a[0] = 1; // 增加一个元素 改变原数组 a = [1]
a = []; // 开始是空数组
a.push('1') //在末尾追加一个元素,改变元素组 a=['1']
2)删除
a = [0, 1, 2, 3]
delete a[1]; // a[1, empty, 2, 3], delete删除不会改变数组长度,只是使该数组变成稀疏数组
数组遍历
1) for
var ss = [1, 2, 3, 4, 5];
for (var i=0;i<ss.length; i++){
console.log(ss[i]);
}
if(!a[i]) continue; // 跳过null和undefined的元素
if(a[i] === undefined) continue; // 跳过undefined元素
if(!(i in a)) continue //跳过不存在的元素
2) forEach
var data= [1, 2, 3, 4];
data.forEach(function(x){ // 把每个元素作为参数传入
console.log(x);
})
多维数组
javascript不支持真正的多维数组,饭可以使用数组的数组来近似。
var table = new Array(10) //10行
for(var i=0; i<table.length;i++){
table[i] = new Array(10)
} // 每行10列
for (var i=0;i<table.length; i++) {
for(var j=0;j<table[i].length; j++) {
table[i][j] = i * j;
}
}
console.log(table);

数组方法
1)ECMAScript3
join() : 将数组中所有元素转化为字符串并连接在一起,返回最后生成的字符串,不改变原数组。可指定连接元素符号,默认为逗号。
var aa = [1, 2, 3, 4];
var b = aa.join(); // 1,2,3,4
var c = aa.join(''); //
var d = aa.join(' '); // 1 2 3 4
var e = aa.join('_'); // _2_3_4
reverse() : 颠倒数组元素的顺序,返回逆序的数组,改变了原数组
var a = [1, 2, 3, 4];
a.reverse(); // [4, 3, 2, 1]
sort() : 将数组元素排序返回排序后的数组。如果有undefined,会被排在尾部。改变原数组。
//按照字母表顺序排序
var a = new Array('pineapple', 'banana', 'apple');
a.sort(); // ["apple", "banana", "pineapple"]
//按照字母表顺序排序
var a = [1, 2, 3, 4, 111,333, 323];
a.sort(); // [1, 111, 2, 3, 323, 333, 4]
// 区分字母大小写
var a = ['Dog', 'big','apple','Cat']
a.sort(); // ["Cat", "Dog", "apple", "big"]
// 数字从小到大排序
var a = [1, 2, 3, 4, 111,333, 323];
a.sort(function(a,b){
return a-b; // 根据顺序返回负数 0 正数
})
//字母不区分大小写
var a = ['Dog', 'big','apple','Cat'];
a.sort(function(a, b){
var s = a.toLowerCase();
var t = b.toLowerCase();
if(s>t){
return -1
}
if(s<t){
return 1;
}
return 0;
}) // ["Dog", "Cat", "big", "apple"]
concat() : 创建并返回新数组
var a = [1, 2, 3, 4];
var b = a.concat([23, 24],45);
console.log(a); // [1, 2, 3, 4]
console.log(b); // [1, 2, 3, 4, 23, 24, 45]
slice(a, b) : 返回指定数组的一个片段或子数组. 两个参数指定开始和结束位置。负数表示相对于数组最后一个元素的位置。不改 变原数组
var a = [1, 2, 3, 4, 5];
var b = a.slice(1, 4); // [2, 3, 4]
var c = a.slice(2); // [3, 4, 5]
var d = a.slice(1, -1); // [2, 3, 4]
var e = a.slice(-1, 1); // []
console.log(a) // [1, 2, 3, 4, 5]
splice(a, b) : 在数组中插入或删除元素, 第一个参数指定插入或删除的开始位置,第二参数指定从该数组删除元素的个数。返回删 除的元素组成的数组。改变了原数组。
var a = [1, 2, 3, 4, 5];
a.splice(4); // a: [1, 2, 3, 4]; 返回 [5]
a.splice(1,2); // a:[1, 4]; 返回 [2, 3]
a.splice(2,0,'a','b'); //a:[1, 4, "a", "b"]; 返回 []
a.splice(2,1, [1,2], 3, 5); // a: [1, 4, [1, 2], 3, 5, "b"]; 返回 ['a']
push() : 在数组尾部增加元素,返回新的数组长度。改变原数组。
pop() : 删除数组最后一个元素,返回删除的元素。改变原数组。
push与pop实现先进后出的栈。
var stack = [];
stack.push(1,2,3,4); //返回4
stack.pop(); //返回4
stack.push([5,4]); //返回4
stack.pop(); // 返回[5, 4]
unshift() :在数组的头部一次性增加一个或多个元素,返回新数组的长度。改变原数组
shift() : 在数组的头部删除一个元素,返回删除的元素。修改数组索引,改变原数组
var a = [1, 3]
a.unshift(12,34); // a: [12, 34, 1, 3] ; 返回 4
a.shift(); // a: [34, 1, 3] ; 返回 12
toString() 和 toLocaleString() : 将每个元素转化为字符串.
[1, 2, 3].toString(); // "1,2,3"
[1, 2, 3].toLocaleString(); // "1,2,3"
['1','2', '3'].toString(); // "1,2,3"
['1','2',3, 4, [5, 6]].toString(); // "1,2,3,4,5,6"
2)ECMAScript5新增
forEach() : 遍历数组,为每个元素调用指定的函数。三个参数:数组元素、元素的索引、数组本身。
var data= [1, 2, 3, 4];
data.forEach(function(x){ // 把每个元素作为参数传入
console.log(x);
})
map() : 将调用的数组元素传递给指定的函数,返回一个新数组。
var a = [1, 2, 3, , 5]; // [1, 2, 3, empty, 5] var b = a.map(function(x) {return 2*x}); // [2, 4, 6, empty, 10]
filter() : 调用数组的一个子集,返回布尔值。若为true返回稠密数组。不改变原数组。
var a = [1, 2, 3, , 5, 'z',[1, 2]];
var s = a.filter(function(x) {
return x < 4
}); // [1, 2, 3]
every(),some() : 对数组元素应用指定的函数进行判断返回布尔值。every(&&);some(||)
var a = [1, 2, 3, 4, 5];
a.every(function(x) {return x < 10}); // true
a.every(function(x) {return x% 2 ===0}); // false
4 a.some(function(x) {return x% 2 ===0}); //true
reduce():使用指定的函数将数组进行组合,生成单个值。按照索引从左到右。两个参数第一个为操作的函数,第二个参数可选为传递给函数的初始值。
var a = [1, 2, 3, 4, 5];
var sum = a.reduce(function(x,y) {return x+y}, 0); //
var max = a.reduce(function(x,y) {return (x>y)?x:y;}); //
reduceRight(): 按照索引从右到左。
indexOf(),lastIndexOf() : 寻找某个值的第一个索引,如果没有就返回-1,indexOf从头至尾搜索。lastIndexOf反向搜索。
数组类型
isArray([])判断是否为数组
JavaScript权威指南--数组Array的更多相关文章
- JavaScript权威指南 - 数组
JavaScript数组是一种特殊类型的对象. JavaScript数组元素可以为任意类型,最大容纳232-1个元素. JavaScript数组是动态的,有新元素添加时,自动更新length属性. J ...
- JavaScript权威指南 - 函数
函数本身就是一段JavaScript代码,定义一次但可能被调用任意次.如果函数挂载在一个对象上,作为对象的一个属性,通常这种函数被称作对象的方法.用于初始化一个新创建的对象的函数被称作构造函数. 相对 ...
- JavaScript权威指南 - 对象
JavaScript对象可以看作是属性的无序集合,每个属性就是一个键值对,可增可删. JavaScript中的所有事物都是对象:字符串.数字.数组.日期,等等. JavaScript对象除了可以保持自 ...
- 《JavaScript权威指南》读书笔记——JavaScript核心
前言 这本由David Flanagan著作,并由淘宝前端团队译的<JavaScript权威指南>,也就是我们俗称的“犀牛书”,算是JS界公认的“圣经”了.本书较厚(有1004页),读起来 ...
- 【笔记】javascript权威指南-第六章-对象
对象 //本书是指:javascript权威指南 //以下内容摘记时间为:2013.7.28 对象的定义: 1.对象是一种复合值:将很多值(原始值或者对象)聚合在一起,可以通过名字访问这些值. ...
- 【笔记】javascript权威指南-第三章-类型,值和变量
javascript中的原始类型和对象类型(基本类型和引用类型) //本书是指:javascript权威指南 //以下内容摘记时间为:2013.7.27 计算机程序运行时需要对值(value ...
- 深入了解JavaScript权威指南
JavaScript对象可以看作是属性的无序集合,每个属性就是一个键值对,可增可删.JavaScript中的所有事物都是对象:字符串.数字.数组.日期,等等.JavaScript对象除了可以保持自有的 ...
- JavaScript 权威指南-学习笔记(一)
本文所有教程及源码.软件仅为技术研究.不涉及计算机信息系统功能的删除.修改.增加.干扰,更不会影响计算机信息系统的正常运行.不得将代码用于非法用途,如侵立删! ## JavaScript 权威指南-学 ...
- 《javascript权威指南》读书笔记——第一篇
<javascript权威指南>读书笔记——第一篇 金刚 javascript js javascript权威指南 由于最近想系统学习下javascript,所以开始在kindle上看这本 ...
随机推荐
- Qt 滚动窗口类
{ QScrollArea *scrollArea = new QScrollArea(this); scrollArea->setFrameStyle(); scrollArea->se ...
- SD卡两种操作模式在项目中应用的比较
1.SDIO接口传输速度比SPI接口传输速度快:2.STM32的SDIO口还真的不好用 特别是4BIT的方式 我都纠结了好久了 用1BIT的方式倒是可以 速度大概可以到读2M字节每秒(STM32F20 ...
- Python的魔术方法总结
魔术方法:再不需要程序员定义,本身就存在类中的方法就是魔术方法. 魔术方法通常都长这样:__名字__. 1.__str__和__repr__ 为了方便记忆看如下列子 class Course: def ...
- 8ci
- Idea中:No converter found for return value of type: class java.util.ArrayList:Json格式转换问题
1.在搞SSM框架的时候,前端发送请求后,显示如下错误. @ResponseBody注解进行返回List<对象>的json数据时出现 nested exception is java.la ...
- Ubuntu16.04下安装OpenCV3.2.0
1.安装官方给的opencv依赖包 $ sudo apt-get install build-essential $ sudo apt-get install cmake git libgtk2.0- ...
- ABP-DDD学习
有一个比较大的项目,打算使用 DDD +ABP +微服务 开发: 1.涉及到社交: 业务场景比较复杂:会多变: 2.采用前后端分离,netcore+vue; 3.部署采用K8S +docker 进行部 ...
- java 构造方法详解
构造方法(构造器) 是一种特殊的方法,该方法只有功能:构造对象 特点: 1.没有返回值 2.构造方法的名称一定和类名一致 3.不能在构造方法中写r ...
- JS的作用域链与原型链
来一波,好记性不如烂笔头. 这两条链子可是很重要的. 作用域链 当执行一段JS代码(全局代码或函数)时,JS引擎会创建为其创建一个作用域又称为执行上下文(Execution Context),在页面加 ...
- 小白的Redis学习(一)-SDS简单动态字符串
本文为读<Redis设计与实现>的记录.该书以Redis2.9讲解Redis相关内容.请注意版本差异. Redis使用C语言实现,他对C语言中的char类型数据进行封装,构建了一种简单动态 ...