《Javascript权威指南》学习笔记之十二:数组、多维数组和符合数组(哈希映射)

Array(数组)是JavaScript中较为复杂的数据类型,同Java、C#、VB等程序语言的数组相比,Javascript数组中的元素不必为相同的数据类型,可以在数组每个元素上混合使用数字、日期、字符串、Object,甚至添加一个嵌套数组。

一、创建数组

1、var arr1 = new Array(); /var  arr2 = new Array(length); /var arr3 = new Array(element1,element2...);

var arr4 = [element1,element2,...];    length是一个指定数组长度的整数。element是一系列任意值。

2、变长数组:JavaScript的数组长度可以任意扩展。

var arr = new Array(2);
arr[0] = "Jan";
arr[1] = "Feb";
arr[2] = "Mar";
alert(arr.length);   //输出3

3、元素可以为空

var arr = new Array();
arr[0] = "Jan";
arr[2] = "Mar";
alert(arr.length);   //输出3
alert(arr[1]);   //undefined

但是document.write(arr);将输出:Jan,,Mar

4、使用Array()时的注意事项:不能将另外一个数组作为参数传递给该函数,否则是创建了一个仅有一个元素的复合数组

var arr1 = ['a','b','c'];
var arr2 = new Array(arr1);
document.write(arr2+"<br/>");
document.write(arr2[0]+"<br/>");
document.write(arr2[1]+"<br/>");
document.write(arr2[0] === arr1);

结果:

但是使用Object()则不然,它创建了一个对象的副本。

var obj = {a:1,b:2,c:3};
var obj2 = new Object(obj);
document.write(obj2+"<br/>");
document.write(obj2.a+"<br/>");
document.write(obj === obj2);

结果:

二、实现和使用多维数组

在Javascript中不可以直接声明多维数组,但是可以将数组嵌套实现多维数组。

var multiArr = new Array(new Array("one","two"),new Array(1,2));
document.write(multiArr+"<br/>");
document.write(multiArr[0]+"<br/>");
document.write(multiArr[1][0]+"<br/>");
document.write("循环输出数组元素:<br/>");

for(var i = 0; i < multiArr.length; i++)
{
	for(var j = 0; j < multiArr[i].length;j++)
	{
		document.write(multiArr[i][j]+"<br/>");
	}
}

结果:

三、使用Array API处理数组

1、Array类的常见方法和属性:

2、Array类的静态属性:

CASEINSENSITIVE :在排序中,此常数指定不区分大小写。

DESCENDING:在排序中,此常数指定降序排序。

NUMERIC:在排序中,此常数指定数字(不是字符串)排序。

RETURNINDEXEDARRAY:指定排序返回索引

UNIQUESORT:在排序方法中,此常数指定唯一的排序要求。

3、示例

var arr = new Array("Jody");
document.write("原数组:"+arr+"<br/>");
arr.push("Mary");      //新增一个元素
document.write("新增一个元素:"+arr.toString()+"<br/>");

arr.push("Marcell");
document.write(arr.toString()+"<br/>");
arr.shift();   //删除第一个元素
document.write("删除第一个元素:"+arr.toString()+"<br/>");

arr.reverse();  //反转元素
document.write("反转元素:"+arr.toString()+"<br/>");

var arr1 = ["Judy","Jody"];
var arr3 = arr1.concat(arr);  //两个数组相连创建一个新数组
document.write("两个数组相连创建一个新数组:"+arr3.toString()+"<br/>");
document.write("join()方法:"+arr3.join("-")+"<br/>");

var arr4 = arr3.slice(0,2);
document.write("slice()方法返回子数组:"+arr4.join("-")+"<br/>");
document.write("splice()方法删除元素:"+arr3.splice(0,2)+"<br/>");

结果:

四:ECMAScript 5 新增的方法(在IE中,只有IE9支持)

1、every(callbackFunction[,thisObject]):对数组的每一项执行测试函数,直到获得对指定的函数返回false的项。

callbackFunction为定义的函数名,该函数有元素值、元素索引和Array对象三个参数;thisObject可选,是函数的this对象。

2、filter(callbackFunction[,thisObject]):对数组的每一项执行测试函数,根据函数结果构造一个新数组。所有数组元素对指定函数返回TRUE,则新数组中包含此元素,反之,不包含。

3、forEach(callbackFunction[,thisObject]):对数组中的每一项执行回调函数。参数同every()函数。

4、indexOf(seachElement[,fromIndex]):使用“===”运算符搜索数组中的项,并返回该值索引位置。seachElement是查找项,若没有找到则返回-1;fromIndex是查找的起始位置。

5、Array.isArray(objArr):静态方法,判断指定的参数是否为数组。

6、lastIndexOf(seachElement[,fromIndex]):使用“===”运算符搜索数组中的项(从最后一项向前搜索),并返回该值索引位置。语法同indexOf()方法。

7、map(callbackFunction[,thisObject]):对数组的每一项执行测试函数,根据函数结果构造一个新数组,其中包含与原始数组中的每一项的函数结果对应的项。参数语义同every()函数。

8、reduce(callbackFunction[,initialValue]):从左到右,使用函数比较数组中的两个值,将两个值删除一个。callbackFunction是自定义的函数,包含前一个元素值、当前元素值、当前元素索引和Array对象。initialValue是第一次调用callbackFunction函数时的previous值(前一个元素值)。若不定义,第一次调用callbackFunction时前一个元素值是第一个元素值,当前值是第二个元素值;若定义了,则当前值是第一个元素值。

9、refuceRight(callbackFunction[,initialValue]):从右到左,使用函数比较数组中的两个值,将两个值删除一个。参数语义同reduce()。

10、some(callbackFunction[,thisObject]):对数组中的每一项执行测试函数,直到返回true的项。

五、数组的排序:

sort([sortfunction]):用于对数组进行排序,sortfunction可选,用来定义数组元素排序的函数,若省略,元素按照ASCII字符顺序进行升序排列,意味着不能对中文排序。

1、默认的排序规则

1.1   排序区分大小写,大写优先于小写(Z优先于a)

1.2    按升序排序(a优先于b)

1.3    数字字段按字符串形式排序,所以100优先于99,因为1的字符串值比9低。

2、自定义排序:定义sortfunction参数

2.1  函数返回 -1表示传递的第一个参数比第二个参数小

2.2   函数返回 0表示传递的第一个参数等于第二个参数

2.3   函数返回 1表示传递的第一个参数比第二个参数大

var arr = new Array("Tom","Tommy","John");
//按照ASCII顺序升序排列
arr.sort();
document.write("按照ASCII顺序升序排列:"+arr+"<br/>");

var sortFun = function(a,b)
{
	if(a.length < b.length) return -1;
	if(a.length > b.length) return 1;
	if(a.length == b.length) return 0;
}

arr.sort(sortFun);
document.write("按照自定义顺序排列:"+arr+"<br/>");

结果:

六、创建和使用复合数组:在Javascript中可以使用Object和Array对象创建复合数组

1、使用Object对象创建

var per = {sex:"male",age:28,birth:new
Date(1980,7,5)};

document.write(per.sex)
<=> document.write(per[‘sex‘]) ;//类似于创建Javascript对象

2、使用Array对象创建

var per = new Array();

per[‘sex‘] = "male";   per[‘age‘] = 28;  per[‘birth‘] = new Date(1980,7,5);

以下方法则是错误的:

var per = [sex:"male",age:28,birth:new Date(1980,7,5)];

3、遍历复合数组

var per = new Array();
per['sex'] = "male";
per['age'] = 28;
per['birth'] = new Date(1980,7,5);

for(var i in per)
{
	document.write(i+" : "+per[i]+"<br/>");
}

结果:

《Javascript权威指南》学习笔记之十二:数组、多维数组和符合数组(哈希映射)

时间: 2024-12-25 10:50:03

《Javascript权威指南》学习笔记之十二:数组、多维数组和符合数组(哈希映射)的相关文章

JavaScript权威指南学习笔记之一

1.关于分号 javascript里面不强制使用分号来表示一行语句的结束,但是最好能够在写js之前,特别是在原有的js上面新增时,最好前置一个分号.避免这种情况发生:  2.JavaScript类型转换 3.关于=== ①如果类型不同则不等 ②null===null或undefined===undefined ③true===true或false===false ④NaN不等 ⑤0===0 0===-0 ⑥如果是同一个object,array,function则相等 4.关于== ①如果已经==

javascript权威指南学习笔记1

打开这本书,进入到javascript的世界.以前都是看各种视频,感觉什么收获也没有,反而弄得脑袋混乱,希望能够按照这本书的节奏掌握javascript这门语言,为我的前端学习打下基础. 学习前准备:web浏览器(F12用来唤醒和关闭firebug界面,ctrl+shift+j用来唤醒错误工作台,console.log()调试辅助) 本书分为4个部分:Javascript语言核心:客户端Javascript:Javascript核心参考:客户端Javascript参考.今天主要学了第一部分.主要

javascript权威指南学习笔记2

Javascript语言核心(2~12章) 第三章:类型.值.变量 1.数字: overflow(Infinity, -Infinity).underflow(+0,-0) 非数字值:它和任何值都不相等,包括自身.if(x!=x) return NAN:==>isNaN()判断是不是NaN或者字符串等 javascript的精度要注意,即(0.3-0.2)!=(0.2-0.1) Date()构造函数:月份从0开始计数,天数从1开始计数,星期天是0: 2.文本: 转义字符(牢记斜杠后面几个特殊的值

javascript 权威指南学习笔记

//通过id查找多个元素 function getElements(/*ids...*/){ var elements = {}: for(var i=0; i<arguments.length; i++){ var id = arguments[i]; var elt =document.getElementById("id"); if(elt == null) throw new Error("No element with id :" +id); ele

Git权威指南学习笔记(二)Git暂存区

如下图所示: 左侧为工作区,是我们的工作目录. 右侧为版本库,其中: index标记的是暂存区(stage),所处目录为.git/index,记录了文件的状态和变更信息. master标记的是master分支所代表的目录树.HEAD指向master分支. objects标记的是Git的对象库,所处目录为.git/objects,文件索引建立了文件和对象库中对象实体之间的映射关系. 通过该图我们可以清晰地看出add,commit等命令的转化关系.下面通过git diff和git status两条命

MongoDB权威指南学习笔记5---索引相关的知识点

1 查看查询计划 db.user.find({"username":"xxx"}) .explain() db.doc.find({"es_y":"2014"}).explain() {  "cursor" : "BasicCursor",  "isMultiKey" : false,  "n" : 0,  "nscannedObject

SaltStack 学习笔记 - 第十二篇: SaltStack Web 界面

SaltStack 有自身的用python开发的web界面halite,好处是基于python,可以跟salt的api无缝配合,确定就比较明显,需要个性化对web界面进行定制的会比较麻烦,如果喜欢体验该界面的可以参考下面的文章  http://rfyiamcool.blog.51cto.com/1030776/1275443/ 我是运用另一个python+php来进行web开发,具体需要的工具有在我的另一篇文章里面介绍过,这里再重新进行整个开发介绍 首先介绍php 跟python通信的工具 pp

【Unity 3D】学习笔记四十二:粒子特效

粒子特效 粒子特效的原理是将若干粒子无规则的组合在一起,来模拟火焰,爆炸,水滴,雾气等效果.要使用粒子特效首先要创建,在hierarchy视图中点击create--particle system即可 粒子发射器 粒子发射器是用于设定粒子的发射属性,比如说粒子的大小,数量和速度等.在创建完粒子对象后,在右侧inspector视图中便可以看到所有的粒子属性: emit:是否是使用粒子发射器. min size:粒子最小尺寸. max size:粒子最大尺寸. min energy:粒子的最小生命周期

马哥学习笔记三十二——计算机及操作系统原理

缓存方式: 直接映射 N路关联 缓存策略: write through:通写 write back:回写 进程类别: 交互式进程(IO密集型) 批处理进程(CPU密集型) 实时进程(Real-time) CPU: 时间片长,优先级低IO:时间片短,优先级高 Linux优先级:priority 实时优先级: 1-99,数字越小,优先级越低 静态优先级:100-139,数据越小,优先级越高 实时优先级比静态优先级高 nice值:调整静态优先级   -20,19:100,139   0:120 ps