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上看这本 ...
随机推荐
- 关于Url路径中出现特殊字符,文件无法下载的问题
1.原网址 传送门:http://blog.csdn.net/jackljf/article/details/43796137 在站点根目录新建或编辑web.config 文件,找到<syst ...
- 8款非常不错的.Net反编译利器
本人搜集了下8款非常不错的.Net反编译利器: 1.Reflector Reflector是最为流行的.Net反编译工具.Reflector是由微软员工Lutz Roeder编写的免费程序.Refle ...
- Linux快捷键 Linux权限
第1章 回顾昨天内容 1.1 取出网卡ip地址 取出文件权限 1.2 awk '找谁{干啥}' awk 'NR==2{print $4}' 1.3 系统时间 [root@oldboyedu-40-n ...
- Python爬虫入门之Cookie的使用
本节我们一起来看一下Cookie的使用. 为什么要使用Cookie呢? Cookie,指某些网站为了辨别用户身份.进行session跟踪而储存在用户本地终端上的数据(通常经过加密) 比如说有些网站需要 ...
- Saiku更改導出文件的文件名(十九)
Saiku更改導出文件的文件名 Saiku查询完数据之后,可以以excel,pdf,csv等格式将数据导出,这里我们来讲一下怎么更改导出的文件名. 找到对应的导出方法所在的js文件: saiku-se ...
- LAMP分离搭建WordPress
实验环境:centos6.5 php5.3.6 http2.4.35 yum安装mysql 关闭三台主机的Selinux.iptalbes 配置apache: 解压软件包 安装依赖包:pcre-dev ...
- 异常java.lang.NumberFormatException解决
原因一:超出了int类型的取值范围 项目中要把十六进制字符串转化为十进制, 用到了到了Integer.parseInt(str1.trim(), 16):这个是不是后抛出java.lang.Numbe ...
- 从SQLServer转储数据到MySQL
前一段时间,由于项目需要将数据库从SQLServer迁移到MySQL,在网上百度了很久,基本都是通过SQLyog实现的.其实使用平时常用的数据库管理软件Navicat Premium也能做到,并且操作 ...
- python简单爬虫 使用pandas解析表格,不规则表格
url = http://www.hnu.edu.cn/xyxk/xkzy/zylb.htm 部分表格如图: 部分html代码: <table class="MsoNormalTabl ...
- JDBC-day1
package cn.gzsxt.test; import java.sql.Connection;import java.sql.DatabaseMetaData;import java.sql.D ...