JavaScript笔记4-数组
一.概述:
1.数组是无类型的:同一数组的各元素可以是任意类型,也可以是数组或对象;
2.索引从0开始,最大到2^32-2=4294967294;最多容纳4294967295个元素;
3.数组是动态的,根据需要自动增减;创建数组时无需声明大小,且在大小变化时无需重新分配空间;
4.数组可以是索引连续的(非稀疏数组),也可以是不连续的(稀疏数组),对于稀疏数组来说,length比所有元素的索引要大;
5.通常数组的实现是经过优化的,用数字索引来访问对象比访问常规对象属性要快的多.
二.创建数组
1.var empty = []; //名为empty的空数组
2.var primes = [1,2,3,4]; //4个元素的数组
3.var misc = [1.1, true, "a",];//包含3个类型和逗号的数组
4.
var base = 1;
var table = [base, base+1, base+2, base+3];//可以包含表达式
5.var b = [[1,{x:1,y:2}],[2,{x:3,y:4}]];//包含对象直接量或其它数组直接量
6.var count = [1, ,3];//第2个元素为undefined
7.var defs = [ , , ];//数组含2个元素,都是undefined,数组直接量的语法允许有可选的结尾的逗号,所以该数组只有2个元素;
8.var a = new Array();//调用Array()函数,无参,相当于创建空数组;
9.var a = new Array(10);//调用Array()函数,创建长度为10的函数;
10.var a = new Array(5,4,3,"testing, testing");//参数即为新数组的元素,即有4个元素,3个整型+1个字符串;
三.数组元素的添加/删除
1.为新索引赋值,即可添加,如a[2]=2;
2.push()方法在数组末尾添加,如a.push(2),该方式与a[a.length]一致
3.unshift()方法在数组首部添加,其它元素依次后移
4.delete删除数组元素,删除时数组长度不变,该位置不再有元素,非稀疏数组变成稀疏数组
如:a = [1,2,3]
delete a[1];
删除索引为1的元素之后,a.length=3; console.log(a[1])会返回undefined;该数组变为稀疏数组
四.数组遍历
1.常规for循环
var a =[1,2,3, null, ,];
delete a[1];
var len = a.length;
console.log(len);//5
for(var i = 0; i<a.length; i++){
//跳过null/undefined以及不存在的元素
// if(!a[i])
// continue;
//console.log(a[i]);//1 3
//跳过undefined和不存在的元素
// if(a[i]===undefined)
// continue;
//console.log(a[i]);//1 3 null
//跳过不存在的元素
if(!(i in a))
continue;
console.log(a[i]);//1 3 null
}
2.forEach
求以下数组各元素的平方和
var a =[1,2,3, null, ,];
delete a[1];
var sq=0;
a.forEach(function(x){
sq += x*x;
});
console.log(sq);//1+9=10
五.多维数组
javaScript不支持真正的多维数组,可以用数组的数组来近似;
举例:模拟9*9乘法表
var table = new Array(10);
for(var i =0; i<table.length; i++){
table[i] = new Array[10];
}
for(var row = 0; row < table.length; row++){
for(var col=0;col<table[row].length;col++){
table[row][col]=rol*col;
}
}
console.log(table[5][7]);//35
六.数组方法
1.join():将数组元素拼接成一个字符串;返回最终形成的字符串,是String.split()的逆操作;数组没有split()方法.
2.reverse():将数组颠倒顺序,返回逆序数组.注意是修改原数组,而不是生成新数且;
3.sort():返回排序后的数组;
1.不带参数时,以字母表顺序排序(如有必要将临时转为字符串比较);
2.若包含undefined函数,会被排到数组的尾部;
3.若自定义规则,需传入函数;假设第一个参数在前,应该返回一个小于0的数;
举例1:
var a = [33,4,1111,222];
// a.sort();
// console.log(a);//字母表顺序[1111, 222, 33, 4]
// a.sort(function(x,y){
// return x-y;
// });
// console.log(a);//[4, 33, 222, 1111]
a.sort(function(x,y){
return y-x;
})
console.log(a);//[1111, 222, 33, 4]
举例2:
var b =['ant','Bug','cat','Dog'];
b.sort(function(x,y){
var a = x.toLowerCase();
var b = y.toLowerCase();
if(a>b){
return 1;
}else if(a<b){
return -1;
}else{
return 0;
}
})
console.log(b);//["ant", "Bug", "cat", "Dog"]
4.concat():返回一个由原数组和该方法的参数组成的新数组;
注意:1.参数若为数组,则连接数组中的元素,而非数组本身;
2.不会递归扁平化数组的数组;
3.不会修改调用的数组;
举例:
var a = [1,2,3];
console.log(a.concat(4,5));//[1, 2, 3, 4, 5]
console.log(a.concat([4,5]));//[1, 2, 3, 4, 5]
console.log(a.concat([4,5],[6,7]));//[1, 2, 3, 4, 5, 6, 7]
console.log(a.concat([4,5],[6,[7,8]]));//[1, 2, 3, 4, 5, 6, Array(2)]
5.splice():插入或删除元素的通用方法;根据参数不同有如下几种情况:
1.只有一个参数:删除从这个参数开始(含)直到结尾的元素,并返回由删除元素组成的数组;
如:var a = [1,2,3,4,5,6,7,8];
console.log(a.splice(4));//[5,6,7,8]
2.两个参数:第一个参数为起始位置,第二个参数为删除元素个数(长度),返回由删除元素组成的数组;
如:var a = [1,2,3,4,5,6,7,8];
console.log(a.splice(2,2));//[3,4]
3.传入三个及以上参数:执行先删除,再插入功能.第一个参数指定开始删除及插入的位置,第二个参数为删除的长度,第三个及以后的参数作为数组元素插入;
如:var a = [1,2,3,4,5,6,7,8];
console.log(a.splice(2,3,[2,3],4));//[3, 4, 5]
console.log(a);//[1, 2, Array(2), 4, 6, 7, 8]
console.log(a.length);//7
6.push():在数组的尾部添加一个或多个元素(作为栈来使用),并返回新的数组长度;
pop():删除数组的最后一个元素,减少数组的长度(delete不会减少数组长度),并返回删除的值;该方法无参数,调用一次只删除一个元素;
注:两个方法都是修改并替换原有数组,而非生成新的数组
举例:
var a = [];
console.log(a.push(1,2,3));//返回数组长度3
console.log(a.pop());//返回删除的值3
console.log(a.pop());//2
console.log(a.length);//1
7.unshift():从数组头部添加元素;参数作为数组元素添加;
shifte():从数组头部删除一个元素,无参数;
举例:
var a = [9];
console.log(a.unshift(1,2,3));//在数组头部添加元素并返回数组长度4
console.log(a);//[1, 2, 3, 9]证明在头部添加
console.log(a.shift());//返回删除的元素1(从头部开始删除)
8.toString():将数组的每个元素转化为字符串并输出以逗号分隔的字符串列表;
toLocalString():使用本地化(和自定义实现的)分隔符将这些字符串连接成最终的字符串;
举例:
console.log([1,2].toString());//1,2
console.log([1,2].toLocaleString());//1,2
JavaScript笔记4-数组的更多相关文章
- JavaScript笔记之数组 keyword(存储和释放&堆栈 & 按值 引用)
1.数组创建及初始化 var obj=new Array(); var arr=[]; 可以延伸为长度一定的,字面量定义数组 2.堆栈 按值传递 引用类型 数组是引用类型,不是值传递, 栈:系桶自动分 ...
- JavaScript学习笔记之数组(二)
JavaScript学习笔记之数组(二) 1.['1','2','3'].map(parseInt) 输出什么,为什么? ['1','2','3'].map(parseInt)//[1,NaN,NaN ...
- JavaScript笔记02——基本语法(包括函数、对象、数组等)
Doing Math & Logic Conditional & Looping Functions Objects Arrays Doing Math & Logic 1.J ...
- [Effective JavaScript 笔记]第3章:使用函数--个人总结
前言 这一章把平时会用到,但不会深究的知识点,分开细化地讲解了.里面很多内容在高3等基础内容里,也有很多讲到.但由于本身书籍的篇幅较大,很容易忽视对应的小知识点.这章里的许多小提示都很有帮助,特别是在 ...
- PHP学习笔记之数组篇
摘要:其实PHP中的数组和JavaScript中的数组很相似,就是一系列键值对的集合.... 转载请注明来源:PHP学习笔记之数组篇 一.如何定义数组:在PHP中创建数组主要有两种方式,下面就让我 ...
- 【原】javascript笔记之Array方法forEach&map&filter&some&every&reduce&reduceRight
做前端有多年了,看过不少技术文章,学了新的技术,但更新迭代快的大前端,庞大的知识库,很多学过就忘记了,特别在项目紧急的条件下,哪怕心中隐隐约约有学过一个方法,但会下意识的使用旧的方法去解决,多年前ES ...
- javaScript笔记详解(1)
javaScript基础详解 版权声明 本文原创作者:雨点的名字 作者博客地址:https://home.cnblogs.com/u/qdhxhz/ 首先讲javaScript的摆放位置:<sc ...
- 前端开发:Javascript中的数组,常用方法解析
前端开发:Javascript中的数组,常用方法解析 前言 Array是Javascript构成的一个重要的部分,它可以用来存储字符串.对象.函数.Number,它是非常强大的.因此深入了解Array ...
- JavaScript 基础回顾——数组
JavaScript是无类型语言,数组元素可以具有任意的数据类型,同一个数组的不同元素可以具有不同类型.数组的元素设置可以包含其他数组,便于模拟创建多维数组. 1.创建数组 在JavaScript中, ...
- javascript里面的数组,json对象,动态添加,修改,删除示例
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...
随机推荐
- RDA项目打包
注意APP的编译搭建: ./aps/Makefile.toolchain //ccoption path的设定 ./aps/rules.mak //统一的编译规则 MAKE -C 1.TOOLS的可执 ...
- AI-Info-Micron-Insight:将您的游戏技能变成一份工作
ylbtech-AI-Info-Micron-Insight:将您的游戏技能变成一份工作 1.返回顶部 1. 将您的游戏技能变成一份工作 听起来不现实? 一位来自著名商学院的教授不这么认为.他认为,金 ...
- SVN服务器搭建教程
常见的源代码管理工具 CVS 历史悠久,现在几乎没人使用 SVN 集中式版本控制的代表 CVS的接班人,速度比CVS快,功能比CVS强大 在国内使用率非常高(70%~90%) GIT 分布式源代码管理 ...
- linux下 卸载vmtools
注意事项: 1) 安装linux时,一定要安装gcc和kernel-source: 2)光驱使用完毕可使用 umount /mnt/cdrom 卸载掉 3)VMtools 默认安装在 /usr/bin ...
- javascript中的scroll事件
window.addEventListener('scroll',function(){ if(document.compatMode == "CSS1Compat") { ale ...
- Python实现栈、队列
目录 1. 栈的Python实现 1.1 以列表的形式简单实现栈 1.2 以单链表形式实现栈 2. 队列的Python实现 2.1 以列表实现简单队列 2.2 以单链表形式实现队列 本文将使用py ...
- 洛谷P2875 [USACO07FEB]牛的词汇The Cow Lexicon
P2875 [USACO07FEB]牛的词汇The Cow Lexicon 题目描述 Few know that the cows have their own dictionary with W ( ...
- AcDbHelix Demo
AcDbObjectPointer<AcDbHelix> aHelix; aHelix.create(); aHelix->setAxisPoint(AcGePoint3d(, , ...
- 剑指Offer的学习笔记(C#篇)-- 用两个栈实现队列
题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 一 . 概念! 首先要理解栈和队列的概念. 1. 栈:咱可以简单的把栈理解成装羽毛球的球桶.或者我们吃的 ...
- express解决ajax跨域访问session失效问题
最近在学习express,就用以前做的项目来进行express前后端分离的练手了,在做登陆注册的时候发现跨域的时候,session的值是会失效的,导致session里面的数据获取为undefined, ...