《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/>");
结果:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMTA0Mzg0Mw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
六、创建和使用复合数组:在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权威指南》学习笔记之十二:数组、多维数组和符合数组(哈希映射)的更多相关文章
- JavaScript 权威指南-学习笔记(一)
本文所有教程及源码.软件仅为技术研究.不涉及计算机信息系统功能的删除.修改.增加.干扰,更不会影响计算机信息系统的正常运行.不得将代码用于非法用途,如侵立删! ## JavaScript 权威指南-学 ...
- JavaScript权威指南学习笔记6
这两天主要翻看了书中的第18-22章,重点看了第17章:事件化处理,其它几章节主要是翻了下书知道有相关的概念,没有真正理解其中的内容,或者没有考虑究竟如何能把里面的内容应用到实际的项目中.说的讽刺一点 ...
- javascript权威指南学习笔记1
打开这本书,进入到javascript的世界.以前都是看各种视频,感觉什么收获也没有,反而弄得脑袋混乱,希望能够按照这本书的节奏掌握javascript这门语言,为我的前端学习打下基础. 学习前准备: ...
- JavaScript权威指南学习笔记4
今天看了第9.10.11章,感觉收获最大还是正则表达式那章节,不过这些不用太多脑子思考,问题用到了直接查书就可以了,下面分别总结一下: 第9章类和模块:分9节,前面8节都是在讲类相关的知识,最后一节讲 ...
- Javascript权威指南学习笔记
第二章:词法结构 ;function a(){alert(2)};//前面的分号保证正确地语句解析 第三章:类型.值和变量 基本概念: 1.数据类型---能够表示并操作的值的类型叫做数据类型. 2.变 ...
- javascript权威指南学习笔记3
今天看到第四章,记录一下其中的几个点,俗话说:好记性不如烂笔头嘛. 4.9 in运算符和instanceof运算符 in运算符希望它的左操作数是一个字符串或可以转化为字符串,希望它的右操作数是一个 ...
- javascript权威指南学习笔记2
Javascript语言核心(2~12章) 第三章:类型.值.变量 1.数字: overflow(Infinity, -Infinity).underflow(+0,-0) 非数字值:它和任何值都不相 ...
- JavaScript权威指南学习笔记5
下午在杭图回去前看了书中第二部分的13-17章,看的很粗,感觉大部分东西自己已经知道或者平时开发中不会用到,很多章节只是简单的翻了一下,没有仔细思考里面说到的道理,下面对各章节简单的记录下. 第13章 ...
- 《HTTP 权威指南》笔记:第十二章 基本认证体制
导言 客户端可以通过网络来得到想要的信息,但是有一些信息并不能是对所有人都能看到的,因此必须有一种认证机制.服务器需要通过这种方式来了解用户身份,一旦服务器知道了用户的身份,就可以让用户能够访问请求的 ...
- HTTP权威指南-学习笔记
目录 HTTP权威指南-学习笔记 HTTP: Web的基础 URL与资源 HTTP报文 连接管理 HTTP结构 Web服务器 代理 缓存 集成点: 网关,隧道及中继 Web机器人 识别,认证与安全 客 ...
随机推荐
- STL之set和multiset(集合)
set和multiset会根据特定的排序准则,自动将元素进行排序.不同的是后者允许元素重复而前者不允许. constructing sets #include #include using names ...
- Android 开发笔记 “线程交互(Handler+Thread 和 AsyncTask)”
为什么需要线程 假设需要开发一个联网应用程序,需要从一个网址抓取网页内容,这里读取的网页地址是笔者在本地机器上自己建立的服务器地址.当然在读取网页内容的时候,可以使用HttpClient提供的API, ...
- 【转载】国内网站博客数据统计选免费Google Analytics还是百度统计
[转载]国内网站博客数据统计选免费Google Analytics还是百度统计 Google Analytics谷歌统计是我用的第一个网站统计工具,当然现在也一直在用.Google Analytics ...
- [Python]小笔记-queue
queue的作用: 队列最大的作用就是先进先出(First in First Out).队列对于解决最短路的时候特别好用. python 2.7: 要使用队列,那么要加载头文件Queue,也就是imp ...
- Windows Azure 社区新闻综述(#76 版)
欢迎查看最新版本的每周综述,其中包含有关云计算和 Windows Azure 的社区推动新闻.内容和对话.以下是本周的亮点. 文章.视频和博客文章 · 更新 Windows Azure 中的 SQ ...
- MFC基础,MFC自绘控件学习总结.---转
前言:从这学期开始就一直在学习自绘控件(mfc),目标是做出一款播放器界面,主要是为了打好基础,因为我基础实在是很烂....说说我自己心得体会以及自绘控件的方法吧,算是吐槽吧,说的不对和不全的地方,或 ...
- BZOJ 1609: [Usaco2008 Feb]Eating Together麻烦的聚餐
1609: [Usaco2008 Feb]Eating Together麻烦的聚餐 Description 为了避免餐厅过分拥挤,FJ要求奶牛们分3批就餐.每天晚饭前,奶牛们都会在餐厅前排队入内,按F ...
- Exploring the MapBox stack: MBTiles, TileJSON, UTFGrids and Wax
转自:http://blog.thematicmapping.org/2012/11/exploring-mapbox-stack-mbtiles-tilejson.html In my last b ...
- jbpm系列之五--使用decision节点判断分支情况
我们在用JBPM做流程的时候,很多时候会遇到需要判断的节点.类似java中的switch,根据不同的状态,跳转到不同的节点. 首先我们定义一个流程信息,jpdl流程图如下 明显的可以看到,在此种情况下 ...
- [week2]每周总结与工作计划
这周总体过的还不错吧,没有颓废多少 = =... 果然有计划能够让效率提高,看了每周做个计划是很有益的. 这周前几天照例很忙,课比较多.后面几天每天早上都会安排下今天的计划,这样做起事来就有条理性多了 ...