JavaScript中使用数组

定义数组

var a = new Array();表示定义空数组
var a = new Array(1,true,“string”,[1,2],{x:1,y:2});实数数组
var a = new Array(5);只有一个参数时候表示定义数组长度
var a = new Array(1);表示定义数组长度1,不是数组a[0]
var a =[1,true,“string”,[1,2],{x:1,y:2}];使用直接量定义数组,是用[ ]而不是{ }

使用数组

数组长度是弹性的,且下标都是从0开始的
如果下标为负数,浮点数,布尔值,对象等其他值,JavaScript将自动将它转换为字符串,作为对象属性的名字,而不再是数组下标
数组长度为length属性
var a = [1,2,3]; // 声明数组直接量
a.length = 5; // 增长数组长度
alert(a[4]); // 返回undefined,说明该元素还没有被赋值
a.length = 2; // 缩短数组长度
alert(a[2]); // 返回undefined,说明该元素的值已经丢失
可以通过数组方式支持栈和队列结构操作
可以通过对象结构支持哈希表结构类型
多维数组定义:
var a = [ // 定义二维数组
[1,2,3],
[4,5,6],
[7,8,9]
];

使用数组对象

检索数组

1, for(var i in a) alert(a[i]);
2, for( var i = 0; i < a.length ; i ++ ) alert(a[i]);

操作数组:

1,pop()和push()操作同栈操作表示对数组尾部进行操作

var a = [];				// 定义数组,模拟空栈
a.push(1); 				// 进栈,栈值为[1],此时该方法返回值为1
a.pop();				// 出栈,栈值为空,此时该方法返回值为1
a.push(2); 				// 进栈,栈值为[2],此时该方法返回值为1
a.pop();				// 出栈,栈值为空,此时该方法返回值为2
a.push(3,4); 			// 进栈,栈值为[3,4],此时该方法返回值为2

2,unshift()和shift()表示对数组头部进行操作

var a = [0]; 						// 定义数组
a.unshift(1,2); 					// 同时增加两个元素
alert(a); 							// 返回[1,2,0]

var a = [0]; 						// 定义数组
a.unshift(1); 						// 增加元素1
a.unshift(2); 						// 增加元素2
alert(a); 							// 返回[2,1,0]

shift()表示将数组的第一个元素移出,并返回该元素的值,然后将剩下的所有元素前移一位,如果数组为空,不进行任何操作,返回undefined
3,concat()合并数组

var a = [1,2,3,4,5]; 				// 定义数组
var b = a.concat(6,7,8); 			// 为数组a连接3个元素
alert(b); 							// 返回[1,2,3,4,5,6,7,8]

concat后面参数也可以跟随多个参数,多个数组进行合并

var a = [1,2,3,4,5]; 	// 定义数组
var b = a.concat([[1,2],3],[4,5]); 	// 连接数组
alert(b.length); 				// 返回9,说明数组[1,2]没有被打散

操作子数组

1,splice()表示插入,删除或者替换数组的元素
第一个参数为操作的起始下标(0开始),第二个参数为指定删除的元素个数,第三个及以后表示删除点插入的元素
例如:

var a = [1,2,3,4,5]; 			// 定义数组
a.splice(1,2,3,4,5) 			// 执行删除和插入操作
alert(a); 						// 返回[1, 3,4,5,4,5]

var a = [1,2,3,4,5]; 			// 定义数组
a.splice(2); 					// 从第三个元素开始执行删除
alert(a); 						// 返回[1, 2]

var a = [1,2,3,4,5]; 			// 定义数组
a.splice(2,2); 					// 从第三个元素开始删除二个元素
alert(a); 						// 返回[1, 2, 5]

var a = [1,2,3,4,5]; 			// 定义数组
a.splice(2,0,0,0,0); 			// 执行插入多个元素操作
alert(a); 						// 返回[1, 2, 0, 0, 0, 3, 4, 5]

var a = [1,2,3,4,5]; 			// 定义数组
var b = a.splice(6,2,2,3); 		// 起始值大于length属性值
alert(a); 						// 返回[1, 2, 3, 4, 5, 2, 3]

var a = [1,2,3,4,5]; 			// 定义数组
var b = a.splice(-2,-2,2,3); 	// 第一、二个参数都为负值
alert(a); 						// 返回[1, 2, 3, 2, 3, 4, 5]

当第一个参数大于length时,表示在尾部添加元素
当第一个参数为负数时,表示从尾部向前数,最后一个元素下标为-1,所以例子中-2表示在元素4之前插入2,3元素,第二个参数为负数时被视为0
2,slice()表示返回数组的一部分
第一个参数表示起始下标(包括起始下标),第二个参数表示结束下标(不包括结束下标)

var a = [1,2,3,4,5]; 	// 定义数组
var b = a.slice(2,5); 	
// 截取数组中第三个元素到第六个元素前的所有元素
alert(b); 					// 返回[3, 4, 5]

var b = a.slice(2); 		
// 截取数组中第三个元素,以及后面所有元素
alert(b); 					// 返回[3, 4, 5]

var b = a.slice(-4,-2); 	
	// 截取倒数第四个元素,直到倒数第二个元素前的所有元素
alert(b); 					// 返回[2, 3]

var b = a.slice(-2,-4); 
	// 截取倒数第二个元素,直到倒数第四个元素前的所有元素
alert(b); 					// 返回空集


var b = a.slice(3,10); 	// 截取第四个元素,直到后面所有元素
alert(b); 	// 返回[ 4, 5]

当参数为负数时,按照末尾元素下标为-1,依次类推
当第一个参数大于等于第二个参数时,不执行操作,返回空集
当第一个参数大于length时,不执行操作,返回空数组
当第二个参数大于length时,被视为length

slice()不会修改元数组,splice()会修改原数组

数组排序

1,reverse()表示颠倒数组中元素位置

var a = [1,2,3,4,5]; 				// 定义数组
a.reverse();						// 颠倒数组顺序
alert(a); 							// 返回数组[5,4,3,2,1]

2,sort()表示对数组元素进行排序

var a = ["a","e","d","b","c"];		// 定义数组
a.sort();							// 按字母顺序对元素进行排序
alert(a); 							// 返回数组[a,b,c ,d,e]

var a = ["aba","baa","aab"];		// 定义数组
a.sort();							// 按字母顺序对元素进行排序
alert(a); 							// 返回数组[aab,aba ,baa]

使用排序函数

排序函数调用,a.sort(f)
排序函数:必须包含两个参数a,b
如果a在b前面,则返回小于0值,如,1
如果a在b后面,则返回大于0值,如,1
例如:表示奇数排在前面,偶数排在后面

function f( a, b ){ 				// 排序函数
    var a = a % 2; 					// 获取参数a的奇偶性
    var b = b % 2; 					// 获取参数b的奇偶性
    if( a == 0 ) return 1; 			// 如果参数a为偶数,则排在左边
    if( b == 0 ) return -1; 		// 如果参数b为偶数,则排在右边
}
var a = [3, 1, 2, 4, 5, 7, 6, 8, 0, 9]; 	// 定义数组
a.sort( f ); 				// 根据数字大小由大到小进行排序
alert( a ); 			// 返回数组[3,1,5,7,9,0,8,6,4,2]

数组和字符串转换

1,toString()将数组换成字符串,当数组用于祖父从环境中,JavaScript会自动调用toString(),比如:数组相加,多维数组转换成字符串时,会将元素全部提取出然后用逗号隔开
例如:

var a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]; 	// 定义数组
var s = a.toString();		// 把数组转换为字符串
alert( s ); 		// 返回字符串"1, 2, 3, 4, 5, 6, 7, 8, 9, 0"
alert( typeof s );		 	// 返回字符串string,说明是字符串类型

var a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]; 	// 定义数组
var b = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]; 	// 定义数组
var s = a + b; 								// 数组连接操作
alert( s ); 
// 返回字符串"1, 2, 3, 4, 5, 6, 7, 8, 9, 01, 2, 3, 4, 5, 
//6, 7, 8, 9, 0"
alert( typeof s ); 			// 返回字符串string,说明是字符串类型

var a = [[1, [2, 3], [4, 5]], [6, [7, [8, 9], 0]]]; 
// 定义多维数组
var s = a.toString();		// 把数组转换为字符串
alert( s ); 	// 返回字符串"1, 2, 3, 4, 5, 6, 7, 8, 9, 0"

2,toLocalString()将数组转换成局部字符串,根据特定区域分隔符把生成字符串连接起来,例如:大陆将数组转换为浮点数再执行字符串操作
3,join()将数组元素连接起来构建一个字符串
例如:
var b = a.join("==")表示元素用 == 连接的字符串
4,与join()相反的split(),split()表示根据分隔符分隔成数组
例如:

var s = "1==2== 3==4 ==5";				// 定义字符串
var a = s.split("==");					// 分隔字符串为数组
alert( a ); 						// 返回数组[1, 2, 3, 4, 5]
alert( a.constructor == Array ); 		// 返回true,说明是数组

定位

1,indexOf()表示数组从前往后搜索到元素的下标,未找到返回-1
第一个参数表示指定值,第二个参数表示起始位置fromIndex(可选,默认为0),如果第二个参数为负表示fromIndex+length位置开始,如果为大于length则返回-1
例如:

var ar = ["ab", "cd", "ef", "ab", "cd"];
document.write(ar.indexOf("cd") + "<br/>");		//1
document.write(ar.indexOf("cd", 2) + "<br/>");		//4
document.write (ar.indexOf("gh")+ "<br/>");		//-1
document.write (ar.indexOf("ab", -2) + "<br/>");	//3

2,lastIndexOf()表示返回指定值再数组中最后一个匹配项的索引,参数同IndexOf(),只是从后向前搜索

迭代

1,forEach为数组中每个元素调用定义的回调函数
回调函数:function callbackfn(value,index,array)

function ShowResults(value, index, ar) {
    document.write("value: " + value);
    document.write(" index: " + index);
    document.write("<br />");
}
var letters = ['a', 'b', 'c'];
letters.forEach(ShowResults);

在这里插入图片描述
2,every检查定义的回调函数是否为数组的任何元素返回true

function CheckIfEven(value, index, ar) {
    document.write(value + " ");
    if (value % 2 == 0)
        return true;
    else
        return false;
}
var numbers = [2, 4, 5, 6, 8];
if (numbers.every(CheckIfEven))
    document.write("都是偶数。");
else
    document.write("不全为偶数。");// 2 4 5不全为偶数。

包含多个参数

//下面示例检测数组numbers中元素的值是否在指定范围内。
var checkNumericRange = function(value) {
    if (typeof value !== 'number')
        return false;
    else 
        return value >= this.minimum && 
        		value <= this.maximum;
}
var numbers = [10, 15, 19];
var obj = { minimum: 10, maximum: 20 }
if (numbers.every(checkNumericRange, obj))
    document.write ("都在指定范围内。");
else
    document.write ("部分不在范围内。");

3,some检查定义的回调函数是否为数组的任何元素返回true

function CheckIfEven(value, index, ar) {
    if (value % 2 == 0)
        return true;
}
var numbers = [1, 15, 4, 10, 11, 22];
var evens = numbers.some(CheckIfEven);
if(evens)
    document.write("不全是奇数。");
else
    document.write("全是奇数。");

4,map对数组的每个元素调用定义的回调函数,并返回包含结果的数组
相当于对数组进行操作
例如:

var obj = {
    divisor: 10,
    remainder: function (value) {
        return value % this.divisor;
    }
}
var numbers = [6, 12, 25, 30];
var result = numbers.map(obj.remainder, obj);
document.write(result);		// 6,2,5,0

5,filter对数组的每个元素调用定义的回调函数,并返回回调函数为其返回true的值的数组
例如:筛选出数组中的素数

function CheckIfPrime(value, index, ar) {
    high = Math.floor(Math.sqrt(value)) + 1;
    for (var div = 2; div <= high; div++) {
        if (value % div == 0) {
            return false;
        }
    } 
    return true;
}
var numbers = [31, 33, 35, 37, 39, 41, 43, 45, 47, 49, 51, 53];
var primes = numbers.filter(CheckIfPrime);
document.write(primes);			//31,37,41,43,47,53

使用filter方法过滤字符串中每个单词的首字母。

function CheckValue(value, index, ar) {
    if (index == 0)
        return true;
    else
        return ar[index - 1] === " ";
}
var sentence = "The quick brown fox jumps over the lazy dog."; 
var subset = [].filter.call(sentence, CheckValue); 
document.write(subset);			// T,q,b,f,j,o,t,l,d

实用例子

快速交换

a=[b,b=a][0]可以快速交换a,b的值

数组下标

数组的下标不一定是非负整数,可以是其他任意类型
例如:
var a = [];
a[true] = 1;
a[“张三”] = 1;
a[1,1] = 4;(逗号运算符,其运算返回值是最后一个值)
JavaScript不支持二维数组

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值