Array类型
ECMAScript数组的每一项可以保存任何类型的数据。
创建数组的两种方式:
(1)使用Array()构造函数
var colors = new Array(20);
var colors = new Array("red","blue","green");
(2)数组字面量表示法
var colors = ["red","blue","green"];
修改、新增
var colors = ["red","blue","green"]
colors[2] = "black"; //修改
colors[3] = "brown" //新增
属性
(1)constructor:
定义和用法
constructor 属性返回对创建此对象的数组函数的引用。
语法
object.constructor
实例
例子 1
在本例中,我们将展示如何使用 constructor 属性:
<script type="text/javascript">
var test=new Array();
if (test.constructor==Array
)
{
document.write("This is an Array");
}
</script>
(2)length:保存数组的项数
例:
var colors = ["red","blue","green"];
alert(colors.length); //3
(3)prototype 属性使您有能力向对象添加属性和方法。
语法
object.prototype.name=value
实例
在本例中,我们将展示如何使用 prototype 属性来向对象添加属性:
<script type="text/javascript">
function employee(name,job,born)
{
this.name=name;
this.job=job;
this.born=born;
}
var bill=new employee("Bill Gates","Engineer",1985);
employee.prototype.salary=null;
bill.salary=20000;
document.write(bill.salary);
</script>
检测数组
(1) if (value instanceof Array) {
//对数组执行某些操作
}
(2)if (Array.isArray(value)) {
//对数组执行某些操作
}
转换方法:
(1)toString(); 把数组转换为字符串,并返回结果。
例:var arr = [12,"123",45,"old"];
console.log(arr.toString());
12,123,45,old
(2)valueOf(); 返回数组对象的原始值
例子:
var arr = [12,"123",45,"old"];
console.log(arr.valueOf());
[12, "123", 45, "old"]
(3)toLocaleString(); 把数组转换为本地数组,并返回结果。
<script type="text/javascript">
var arr = new Array(3)
arr[0] = "George"
arr[1] = "John"
arr[2] = "Thomas"
document.write(arr.toLocaleString()
)
</script>
George, John, Thomas
(4)join(); 把数组的所有元素放入一个字符串。元素通过指定的分隔符进行分隔。
例:var colors = ["red","blue","green"];
alert (color.join("||"));
var arr = [12,"old",14,"young"];
console.log(arr.join(||));
12||old||14||young
栈方法:LIFO(last-in-fisft-out)
插入和移除数据,只发生在栈的顶部
(1)push() 可以接收任意数量的参数,把它们逐个添加到数组的末尾,并返回修改后数组的长度
例:
var arr = [];
arr.push(1);// 返回数组长度 1
arr;// [1]
arr.push(2,3);
arr;// [1,2,3]
(2)pop() 从数组末尾移除最后一项,并返回移除的项
var arr = [1, 2, 3];
arr.pop();// 返回 3
arr;// [1,2]
队列方法:FIFO(first-in-first-out)
队列列表的尾端添加项,从列表的前端移除项
(1)push() 可以接收任意数量的参数,把它们逐个添加到数组的末尾
(2)shift() 移除数组的第一个项并返回该项
var arr = [1, 2, 3];
arr.shift();// 返回 1
arr;// [2,3]
排序方法:
(1)reverse(): 反转数组的顺序
var arr = [1, 2, 3];
arr.reverse();// [3, 2, 1]
arr;// [3, 2, 1]
(2)sort :按升序顺序排列数组
功能:对数组中元素进行排序
语法:sort([sortby])
参数:
如果没有指定sortby参数,默认排序是按照字母的先后顺序排序的;
sortby是一个函数名,这个函数规定元素的排序规则
arr.sort(orderby); //将函数的地址传给sort方法
function orderby(a,b)
{
return a-b; //对数值大小进行排序
}
a-b的结果:
a-b >0 返回大于0的值
a-b = 0 返回等于0的值
a-b < 0 返回小于0的值
按照数值的大小对数字进行排序,要实现这一点,就必须使用一个排序函数:
<script type="text/javascript">
function sortNumber(a,b)
{
return a - b
}
var arr = new Array(6)
arr[0] = "10"
arr[1] = "5"
arr[2] = "40"
arr[3] = "25"
arr[4] = "1000"
arr[5] = "1"
document.write(arr + "<br />")
document.write(arr.sort(sortNumber)
);
</script>
连接方法:
concat():方法用于连接两个或多个数组
<script type="text/javascript">
var arr = new Array(3)
arr[0] = "George"
arr[1] = "John"
arr[2] = "Thomas"
var arr2 = new Array(3)
arr2[0] = "James"
arr2[1] = "Adrew"
arr2[2] = "Martin"
document.write(arr.concat(arr2)
)
</script>
结果
George,John,Thomas,James,Adrew,Martin
获取子数组方法:
slice():从某个已有的数组返回选定的元素
arrayObject.slice(start,end)
参数 |
描述 |
start |
必需。规定从何处开始选取。如果是负数,那么它规定从数组尾部开始算起的位置。也就是说,-1 指最后一个元素,-2 指倒数第二个元素,以此类推。 |
end |
可选。规定从何处结束选取。该参数是数组片断结束处的数组下标。如果没有指定该参数,那么切分的数组包含从 start 到数组结束的所有元素。如果这个参数是负数,那么它规定的是从数组尾部开始算起的元素。 |
返回值
返回一个新的数组,包含从 start 到 end (不包括该元素)的 arrayObject 中的元素。
// slice(开始下标, 结束下标(可选,默认为数组长度))
[‘a‘, ‘b‘, ‘c‘, ‘d‘].slice(1);// ["b", "c", "d"]
[‘a‘, ‘b‘, ‘c‘, ‘d‘].slice(1, 2);// ["b"]
[‘a‘, ‘b‘, ‘c‘, ‘d‘].slice(1, 3);// ["b", "c"]
(3)splice()
// splice(开始下标, 删除个数,插入元素(可以多个))
var arr = [1, 2, 3, 4];
arr.splice(1, 2);// [2,3]
arr;// [1,4]
arr = [1, 2, 3, 4];
arr.splice(1, 2, ‘a‘, ‘b‘, ‘c‘);// [2,3]
arr;// [1, "a", "b", "c", 4]
位置方法:
(1)indexOf(): 找着元素所在的下标,如果能查找到,则返回。否则返回-1
[‘a‘, ‘b‘, ‘c‘, ‘d‘].indexOf(‘c‘); // 2
[‘a‘, ‘b‘, ‘c‘, ‘d‘].indexOf(‘g‘); // -1
(2)lastIndexOf(): 从末尾开始往前找
[‘c‘, ‘d‘, ‘c‘].lastIndexOf(‘c‘); // 2
[‘a‘, ‘b‘, ‘c‘, ‘d‘].lastIndexOf(‘g‘); // -1
迭代方法:对数组的每一项运行给定的函数
(1)every() 数组中是否每个元素都满足指定的条件。
var isAllPositive = [3, 4, -1].every(function(each){
return each > 0;
});
isAllPositive; // false;
isAllPositive = [3, 4].every(function(each){
return each > 0;
});
isAllPositive; // true;
(2)filter() 从数组中找出所有符合指定条件的元素。
// 找出所有正数
var res = [3, 4, -1].filter(function(each){
return each > 0;
});
res; //[3,4]
(3)forEach() 遍历数组。
[‘a‘ ,‘b‘ ,‘c‘].forEach(function(item, index, arr){
console.log(item,index);
});
// 输出 ‘a‘ 0 ‘b‘ 1 ‘c‘ 2
(4)map() 将数组映射成另一个数组。
// 内容 * 2
[1, 2, 3].map(function(each){
return each * 2;
});
some() 数组中是否有元素满足指定的条件。
// 是否有正数
var isSomePositive = [3, 4, -1].some(function(each){
return each > 0;
});
isSomePositive; // true;
isSomePositive = [-3, -4].every(function(each){
return each > 0;
});
isSomePositive; // false;
归并方法:
reduce():
reduce(function(prev,cur,index,array){
})
参数:
prev: 前一个值
cur: 当前值
index: 项的索引
array: 数组对象
从数组的第一项开始,逐个遍历到最后,将数组合成一个值。
// 数组内容求和。0 为初始值
[1, 2, 3].reduce(function(prev, each){
return prev + each;
}, 0);
// 返回 6
reduceRight(): 从数组的最后一项开始,逐个遍历到第一项
循环遍历数组: