js数组冷知识

省略数组值

在声明数组时,省略一些数组值

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;
},[]);

猜你喜欢

转载自www.cnblogs.com/Lazy-Cat/p/12298610.html
今日推荐