省略数组值
在声明数组时,省略一些数组值
let a = [1,,3] //a.length为3
a = [,,] //a.length为2
0 in a //false,a在索引0处没有元素
稀疏数组
稀疏数组时指包含从0开始的不连续索引的数组。如果数组是稀疏的,则length属性值大于元素的个数
a = new Array(5); //数组没有元素但length为5
a = []; //创建一个空数组,length=0
a[1000] = 0; //赋值添加一个元素,length为1001
数组长度有两个特性,一是它总是大于每个元素的索引值,二是当数组长度小于等于某些元素索引值时会删除这些元素。
let arr = [1,2,3,4,5]; // 从5个元素的数组开始
arr.length = 3; //现在的arr为[1,2,3]
arr.length = 0; //删除所有的元素,arr为[]
arr.length = 5; //长度为5,但是没有元素,就像new Array(5)
filter,every,some,reduce,reduceRight
filter类似于forEach和map,都是对数组进行循环,但filter()会跳过稀疏数组中缺少的元素,所以它的返回数组总是稠密的。
let arr = [1,,2,3];
some = arr.filter(function(x){return x < 2}); //[1]
every()方法就像数学中的∀
let arr = [1,2,3,4]
arr.every(function(x){return x > 0;}) //true
arr.every(function(x){return x % 2 === 0;}) //false
some()方法就像数学中的∃
let arr = [1,2,3,4]
a.some(function(x){return x > 10;}) //false
a.some(function(x){return x % 2 === 0;}) //true
reduce和reduceRight十分类似都是使用指定的函数将数组元素进行重新组合,不过reduceRight是按索引从高到底进行。
//数组求和
let sum = arr.reduce(function (x, y) {
return x + y;
},0);
//数组求最大值
let max = arr.reduce(function (x, y) {
return Math.max(x,y);
});
//数组去重
var newArr = arr.reduce(function (x, y) {
x.indexOf(y) === -1 && x.push(y);
return x;
},[]);