数组深入研究

一:稀疏数组

  稀疏素组就是包含从0个开始的不连续数组。通常,数组的length属性值代表数组中元素的个数。如果数组是稀疏,length属性值大于素数的个数。可以用Array(),构造函数或简单地指定数组的索引值大于当前的数组长度来创建稀疏数组。

<script>
    var a = new Array();
    a = [];
    a[1000] = 0;
</script>

  注意:当在数组直接量中省略值时不会创建稀疏数组。省略的元素在数组中是存在的。其值为undefined。这和数组元素根本不存在是有一些微妙的区别的。

<script>
    var a = new Array(3); /*【undefined,undefined,undefined】*/
    var b = [,,,];
    console.log( 0 in a);/*true*/
    console.log(o in b);/*false*/
</script>

二:数组元素的添加和删除

  1:为新索引赋值

var a = [];
a[0] = "qian";
a[1] = "wei";
console.log(a);

  2:利用push()方法在数组的末尾添加一个或多个元素

var a = [];
a[0] = "qian";
a[1] = "wei";
a.push("ke");
for(var i=0;i<a.length;i++){
    console.log(a[i])    /*qian,wei,ke*/
}

  3:可以像删除对象属性一样使用delete运算符来删除数组元素

var a = [];
a[0] = "qian";
a[1] = "wei";
a.push("ke");
delete a[2];
for(var i=0;i<a.length;i++){
    console.log(a[i])    /*qian,wei,undefined*/
}

  注意:对一个数组元素使用delete不会修改数组的length属性,也不会讲元素从高度索引处一下来填充。如果从数组中删除一个元素,他就会变成稀疏数组。

三:数组的遍历

  1:for循环遍历

var a = [];
a[0] = "qian";
a[1] = "wei";
a.push("ke");
for(var i=0;i<a.length;i++){
    console.log(a[i])    /*qian,wei,ke*/
}

  2:for/in循环处理稀疏数组。循环每次将一个可以枚举的属性名(包括索引)赋值给循环变量。不存在的索引不会被遍历到

var x
var mycars = [];
mycars[0] = "宝马"
mycars[1] = "奔驰"
mycars[3] = "宾利"

for (x in mycars)
{
document.write(mycars[x] + "<br />")   /*宝马 奔驰 宾利*/
}

四:ECMAScript 5 中的数组方法

  1:forEach() 方法用于调用数组的每个元素,并将元素传递给回调函数。

[].forEach(function(value, index, array) {
  // ...
});
var data = [1,2,3,4];
var sum = 0;
data.forEach(function (t) {
sum+=t
});
console.log(sum);/*10*/

  2:map()方法将调用的数组的每个元素传递给指定的函数,并返回一个数组

var data = [1,2,3,4];
var sum = 0;
sum = data.map(function (value) {
    value++;
    return value
});
for(var i=0;i<sum.length;i++){
    console.log(sum[i])    /*2,3,4,5*/
}

  3:filter()方法返回的事数组的一个子集,传递的函数用来做判定。

var data = [1,2,3,4,5,6];
var sum = 0;
sum = data.filter(function (value) {
    return value > 3
});
for(var i=0;i<sum.length;i++){
    console.log(sum[i])    /*4,5,6*/
}

  4:every()和some()都是数组的逻辑判定,他们对数组元素应用指定的函数进行判定,返回true或者false。

  every()对应的是“针对所有”,当且仅当数组中的所有元素调用判定函数返回true。

var data = [1,2,3,4,5,6];
var sum = 0;
sum = data.every(function (value) {
    return value > 3
});
console.log(sum);/*false*/

  some()对应是“存在”,当数组元素至少有一个元素调用判定函数返回true,他就2返回true

var data = [1,2,3,4,5,6];
var sum = 0;
sum = data.some(function (value) {
    return value > 3
});
console.log(sum);/*true*/

  5:reduce()需要两个参数,第一个是执行化简操作的函数,第二个是初始值。

var data = [1,2,3,4,5,6];
var sum = 0;
sum = data.reduce(function (x,y) {
    return x+y
},0);
console.log(sum);/*21*/

  6:reduceRight()需要两个参数,第一个是执行化简操作的函数,第二个是初始值。计算顺序是从右到左。

var data = [1,2,3,4,5,6];
var sum = 0;
sum = data.reduceRight(function (x,y) {
    return x*y
},1);
console.log(sum);/*720*/
posted @ 2017-09-25 21:42  BluesQian  阅读(173)  评论(0编辑  收藏  举报