javascript中数组Array的方法

一、常用方法(push,pop,unshift,shift,join)
push pop栈方法,后进先出
var a =[1,2,3];
console.log(a.push(40)); //4 返回数组的长度
console.log(a); //[1, 2, 3, 40]
 
var b =[1,2,3];
console.log(b.pop()); //3 返回最后一项
console.log(b); // [1, 2]
------------------------------------------------------------------------------------------------------------------
unshift shift 对列方法,先进先出
var a =[1,2,3];
console.log(a.unshift(40));//4 返回数组长度
console.log(a); // [40, 1, 2, 3]
var b =[1,2,3];
console.log(b.shift()); //1 返回取出的第一项
console.log(b); //  [2, 3]
------------------------------------------------------------------------------------------------------------------
join方法,将数组合并成字符串
var aN=[1,2,3,4,5];
console.log(aN.join(''));//12345
console.log(aN.join('|'));//1|2|3|4|5

二、排序方法(sort,reverse)
reverse 反转方法,即将反转数组顺序
var arr = [1,2,3,4,5];
console.log(arr.reverse()); //[5, 4, 3, 2, 1]
------------------------------------------------------------------------------------------------------------------
sort方法,默认按数组升序进行排列,选把数组中所有项应用toString()方法,然后比较得到的字符串,从字符串首位开始比较
var arr =[1,14,3,25,5];
console.log(arr.sort()); // [1, 14, 25, 3, 5]
按字符首字母升序排列结果是:[1, 14, 25, 3, 5],因为1最小,所以1,14最前
对于sort方法有一个比较函数,可以扩展其功能
function compare(a,b){
    if(a<b){
        return -1;
    }else if(a>b){
        return 1;
    }else{
        return 0;
    }
}
用上面的比较函数对数字进行排序,可以得到我们想要的结果
console.log(arr.sort(compare)); //  [1, 3, 5, 14, 25];
当然这个方法还能简化;
console.log(arr.sort(function(a,b){return a-b}));
sort方法还有其它应用,例如对数组中项目进行随机排序,扩展方法如下:
console.log(arr.sort(function(a, b){return Math.random()>.5 ? -1 : 1}));// [3, 1, 14, 5, 25]
console.log(arr.sort(function(a, b){return Math.random()>.5 ? -1 : 1}));// [5, 1, 3, 14, 25]
console.log(arr.sort(function(a, b){return Math.random()>.5 ? -1 : 1}));// [1, 5, 3, 25, 14]
console.log(arr.sort(function(a, b){return Math.random()>.5 ? -1 : 1}));// [5, 25, 14, 1, 3]
console.log(arr.sort(function(a, b){return Math.random()>.5 ? -1 : 1}));// [25, 5, 14, 3, 1]
执行了五次,得到的结果均不相同

三、concat方法
concat方法用于创建一个新数组
如果想要复制一个数组,用什么方法,举例如下;
var arr =[1,2,3,4,5];
var newArr = arr;
console.log(newArr);//[1, 2, 3, 4, 5]
newArr.push(6);
console.log(newArr);//[1, 2, 3, 4, 5, 6]
console.log(arr); //[1, 2, 3, 4, 5, 6]
可见newArr并不是一个新数组,修改newArr会改变数组,因为数组不是基本数组类型,而是引用类型,所以用=赋值只不过是创建了一个新的引用,修改newArr时会修改堆内存的数据。
那么如何得到一个新的和原来一样的数组呢?
var newArr1 = arr.concat();
console.log(newArr1);//[1, 2, 3, 4, 5]
newArr1.push(6);
console.log(newArr1);//[1, 2, 3, 4, 5, 6]
console.log(arr); //[1, 2, 3, 4, 5]
可见修改新数组不会对原数组产生影响。
concat方法除了复制数组外,主要用于数组的连接,使用concat方法后会返回一个新的数组
var aNumber = [1,2,3];
var aNumber2 = [4,5];
console.log(aNumber.concat(aNumber2)); //[1, 2, 3, 4, 5]
console.log(aNumber); //[1,2,3]
当然concat方法还支持字符串与数组的连接
console.log(aNumber.concat(7,8)); // [1, 2, 3, 7, 8]
console.log(aNumber.concat(7,[11,12])); //[1, 2, 3, 7, 11, 12]

四、slice方法
slice基于当前数组创建一个删除某些项的新数组
var aN =[1,2,3,4,5];
var aN1 = aN.slice(0,2);//截取第0项到第1项
console.log(aN); //[1, 2, 3, 4, 5] 原数组不变
console.log(aN1); // [1, 2]
console.log(aN.slice(1,3));//[2,3] 截取第1项到第2项
即截取起始位置到结束位置之间的项,包括起始位置,但不包括结束位置
如果只有一个参数,则截取该参数到当前数组末尾所有项
console.log(aN.slice(1));//[2, 3, 4, 5]
如果slice中的参数有负数,则用该负数加上数组的长度来确定起始位置或结束位置
console.log(aN.slice(-2,-1));// [4] 相当于console.log(aN.slice(3,4));

五、splice方法
splice方法可用于对原数组的插入、删除、修改,并不会创建一个新数组
var aN =[1,2,3,4,5];
aN.splice(1,2,'b'); //三个参数分别是起始位置,要删除的项数,需要添加的元素
console.log(aN);// [1, "b", 4, 5] 起始位置删除两项得到[1,4,5],然后将元素b插入起始位置
由于splice的强大功能可以实现删除,插入,修改功能
aN.splice(0,1);//删除第1项
aN.splice(1,1);//删除第2项
aN.splice(0,0,'a')//在第0项前插入'a'
aN.splice(2,0,'a')//在第2项前插入'a'
aN.splice(0,1,'b') //将第0项替换成'b'
aN.splice(2,1,'b') //将第2项替换成'b'

六、位置方法(indexOf,lastIndexOf)
indexOf是得到数组元素在数组中的位置,lastIndefOf是从数组末尾向开头找
var aN = [3,4,2,6,5,9];
console.log(aN.indexOf(2)); //2
console.log(aN.indexOf(6)); //3
console.log(aN.lastIndexOf(2));//2
console.log(aN.lastIndexOf(6));//3

indexOf和lastIndexOf都可以接收两个参数,第一个表示要查找的项,第二个表示查找的起来位置
var aN2 = [1,2,5,4,6,2,4,5,8,2];
console.log(aN2.indexOf(2,3));//5 从第4项开始算起,所以取的是第二个2,位置为5
console.log(aN2.lastIndexOf(2,5));//5 从第6项即第二个2开始从尾往前找,所以找到是第6项那个2,它的位置是5
console.log(aN2.lastIndexOf(2,4));//1 从第5项即6这个数字从尾往前找,所以找到是第2项那个2,它的位置是1

七、迭代方法(every,filter,forEach,map,some)
every:对数组中的每一项运行给定函数,如果该函数对每一项都返回true,则返回true.
var aN=[1,2,3,4,5]
var bFlag = aN.every(function(item){
    return item<6
})
console.log(bFlag);//true

var bFlag2 = aN.every(function(item){
    return item<4
})
console.log(bFlag);//false
------------------------------------------------------------------------------------------------------------------
some:对数组中的每一项运行给定函数,如果该函数对任一项都返回true,则返回true.
var aN=[1,2,3,4,5]
var bFlag = aN.some(function(item){
    return item==5
})
console.log(bFlag);//true
var aN=[1,2,3,4,5]
var bFlag = aN.some(function(item){
    return item==6
})
console.log(bFlag);//false
------------------------------------------------------------------------------------------------------------------
filter:对数组中的每一项运行给定函数,返回该函数会返回true的项组成的数组
var aN=[1,2,3,4,5]
var aNewArr = aN.filter(function(item){
    return item>2
})
console.log(aNewArr);// [3, 4, 5]
------------------------------------------------------------------------------------------------------------------
forEach:对数组中的每一项运行给定函数,这个方法无返回值
var aN=[1,2,3,4,5]
aN.forEach(function(item){
    console.log(++item);
})
输出:
2
3
4
5
6
------------------------------------------------------------------------------------------------------------------
map:对数组中的每一项运行给定函数,返回数组调用的结果组成的数组
var aN = [1,2,3,4,5]
var aNewArr = aN.map(function(item){
    return ++item
})
console.log(aNewArr);//[2, 3, 4, 5, 6]

八、缩小方法(reduce,reduceRight)
reduce()方法从数组第一项开始,逐渐遍历到最后一项,reduceRight()方法从数组最后一项开始,逐渐遍历到第一项
var aN = [1,2,3,4,5]
var sum = aN.reduce(function(prev,cru,index,array){
  console.log(prev,cru);
  return prev+cru
})
console.log(sum);
输出
1 2
3 3
6 4
10 5
15
------------------------------------------------------------------------------------------------------------------
var aN = [1,2,3,4,5]
var sum = aN.reduceRight(function(prev,cru,index,array){
  console.log(prev,cru);
  return prev+cru
})
console.log(sum);
输出
5 4
9 3
12 2
14 1
15
------------------------------------------------------------------------------------------------------------------
除了求和也可以进行其它运算,例如求数组中所有项的乘积
var aN = [1,2,3,4,5]
var sum = aN.reduce(function(prev,cru,index,array){ 
  return prev*cru
})
console.log(sum);//120

javascript中数组的功能相当强大,无论是sort方法还是迭代方法(every,some,filter,forEach,map)或者缩小方法(reduce,reduceRight)都可以进行扩展,让代码执行效率更快,书写简单。