Array数组是有序列表,大小动态可调,每一项可以保存任何类型数据。
1 两种构建方法(参考对象的两种创建方法)
var arr1=new Array();
arr1[0]="hello_wordl";
arr1[1]=521;
alert(arr1);
var arr2=["hello_wordl",521];
alert(arr2);
2 length属性的可读可写,在java中赋值超过数组的长度,会报访问越界错误,js中的数组,当赋值超过数组长度,数组自动重新构建。js中数组的length属性可读数组长度,可写改变数组长度。
<script>
var arr1=new Array();
arr1[0]="hello_wordl";
arr1[1]=521;
arr1.length=8;
alert(arr1[7]);//undefined
arr1[arr1.length]="new";//数组最后一位赋值 new
alert(arr1);
</script>
3 数组检测
使用 Array.isArray(value)是个不错的选择,很好的面对各种框架
if(Array.isArray(arr1)){
alert(true);//执行其他逻辑
}
4 转换方法
toString():返回有数组中每一个值得字符串形式拼接而成的一个以逗号分隔符的字符串。
valueof():返回的还是数组
join()只接受一个参数,分隔数组使用的分隔符。
<script>
var arr1=new Array();
arr1[0]="hello_wordl";
arr1[1]=521;
alert(arr1.join("&"));//输出hello_wordl&521
</script>
栈是种先入后出的数据结构,Array()可以使用js提供的push()和pop()让数组实现栈的行为
push()将对象推入数组末尾,返回数组新的长度
pop()将数组的最后一项移出数组,返回被移出项
<script>
var arr1=new Array();
arr1[0]="hello_wordl";
arr1[1]=521;
arr1.push("push1");
arr1.push("push2");
alert(arr1);//输出hello_wordl,521,push1,push2
alert(arr1.pop());///输出push2
</script>
6 队列方法
队列是种先进先出的数据结构,结合shift()和push()方法即让数组模拟队列的操作
push():将对象推入数组末尾,返回数组新的长度
shift():移出队列的第一个项并返回被移出对象,数组长度减1
<script>
var arr1=new Array();
arr1[0]="hello_wordl";
arr1[1]=521;
arr1.push("push1");
alert(arr1);//输出hello_wordl,521,push1
alert(arr1.shift());///输出hello_wordl
</script>
unshift()和shift()作用相反,可在数组前端添加项,并返回新的长度。结合pop()方法,可以让数组从相反的方向模拟队列。
7 数组重排序
reverse()方法会反转数组项的顺序,返回新的数组;
sort()方法,默认会调用每一个项的他toString()方法,然后比较得到的字符串。更多的使用时sort()函数接收一个比较函数,如果第一个参数应在第二个参数前返回负数,第一个参数应该在第二个参数之后返回正数,相同返回零。
<script>
var x={age:13,
name:"xiaoming"
};
var y={age:15,
name:"xiaohong"
};
var z={age:18,
name:"xiaogang"
};
function myCompare1(value1,value2){
return value1.age-value2.age;//年龄从小到大
}
function myCompare2(value1,value2){
return -(value1.age-value2.age);//年龄从大到小
}
var arr=[x,y,z];
var arr1=arr.sort(myCompare1);//年龄从小到大
var arr1=arr.sort(myCompare2);//年龄从大到小
alert(arr1[0].name+arr1[1].name+arr1[2].name);
</script>
8 操作方法:
concat():不接受参数,复制当前数组并返回副本;接收一个值,将该值添加到数组末尾并返回新的数组;接收一个或多个数组,会将这些数组中的每一项添加到新的数组并返回新数组。
slice():基于当前一个或多个项目创建新数组并返回,不影响当前数组。一个参数,返回从该参数指定位置开始到末尾所有项组成的新数组。两个参数,返回起始位置和结束位置所有项组成的数组,不包括结束位置。
splice()主要是执行删除、替换和插入操作。
删除:splice(0,2):从位置0开始删除两项。
插入:splice(1,0,"new1","new2"):从数组位置1开始,插入new1和new2
替换:splice(1,1,"replace1","new1"):从数组位置1开始,删除一项,插入两项。也就是把位置2替换为replace1
9 位置方法:
indexOf():从数组头开始向后找
lastIndexOf():从数组末尾开始向前面找
比较标准:比较参数和数组中每一项时,使用全等操作符(===);没有找到返回-1
10 迭代方法:
every():对数组中的每一项运行给定的函数,如果该函数对每一项都返回true,则返回true
filter():对数组中的每一项运行给定的函数,返回对该函数返回true的项组成的函数
forEach():对数组中的每一项运行给定的函数,没有返回值
map():对数组中的每一项运行给定的函数,返回每次函数调用的结果组成的数组
some():对数组中的每一项运行给定的函数,如果该函数对任一项返回true,返回true;
<script>
var arr=[1,2,3,4];
var every=arr.every(function(item,index,arr){
return item>2;
}
);
alert(every);//false
var some=arr.some(function(item,index,arr){
return item>2;
}
);
alert(some);//true
</script>
迭代方法中参数是函数,函数的三个参数分别是:数组项的值,该项在数组中的位置和数组本身对象
《参考js高级程序设计3》