JS数组及其的常用方法(基础巩固)

在javascript中,数组可以使用Array构造函数来创建,或使用[]快速创建,这也是首选的方法。数组是继承自Object的原型,并且他对typeof没有特殊的返回值,他只返回'object'。

var arr = new Array();
var arr = [1,2,3,4,5];

1 .join()

separator:分割符

将数组组合成一个字符串,不传separator(分隔符)参数便会默认用逗号分隔,反之用传入参数的分隔符分隔。

var arr= [1,2,3]

arr.join()//"1,2,3"字符串
arr.join("-")//"1-2-3"字符串

join()可以配合Array()方法实现重复字符串

function repeatString(n,str){
    return new Array(n+1).join(str);
}
repeatString("abc",3);//"abcabcabc"

2 .push()和pop()

push()可以接受任意个参数,将他们逐个加到数组的末尾,并返回修改后的数组长度。

pop()可以将数组末尾最后一项移除并返回出来。

var arr =["a","b","c"];
var count = arr.push("d","e");

console.log(arr)//["a","b","c","d","e"]
console.log(count)//5

var item = arr.pop();
console.log(item)//e 此时arr为["a","b","c","d"]

pop()是无参数的,即便带了参数也是删除最后一项。

3 .shift()和unshift()

shitf():删除原数组第一项并返回出去,如果数组为空则返回undefined

unshitf():将参数添加到原数组开头、并返回数组的长度。

形同push()和pop(),一个操作开头一个操作结尾。

var arr =["c","d","e"];
var count = arr.unshift("a","b");

console.log(arr)//["a","b","c","d","e"]
console.log(count)//5

var item = arr.shift();
console.log(item)//a 此时arr为["b","c","d","e"]

4 .sort()

sort():按数组项的.toString()得到的字符串升序排序。

这意味着12会在7前面,因为比较的是12的“1”和7的“7”。

var arr1 = ["d","a","b","c"];
console.log(arr1.sort());//["a","b","c","d"]

var arr2 = [12,24,7,41];
console.log(arr2.sort());//[13,24,41,7]

sort()为了解决数字排序的问题,提供了一个参数可以接受一个比较函数,以前后两数之差来判断谁前谁后。

function compare(value1,value2){
    return value1-value2;
}

var arr= [13,51,3,20,43];
console.log(arr.sort(compare));//[3,13,20,43,51]

5 .reverse()

reverse():反转数组项的顺序。

var arr = ["a","b","c"];
console.log(arr.reverse());//["c","b","a"] arr数组也同样

6 .concat()

concat():将参数添加到原数组中。这个方法会先创建当先数组的一个副本,然后将参数加到这个副本的末尾构成新数组并返回,在没有传参的情况下只是复制当先数组并返回副本。

var arr = [1,2,3,4];
var arrCopy = arr.concat(5,[6,7]);
console.log(arrCopy);//[1,2,3,4,5,6,7]传入数组也会被拆分拼接上
console.log(arr);//[1,2,3,4]原数组没有改变

concat中参数的数组拆分只有一维。

var arr = [1,2,3,4];
var arrCopy = arr.concat([5,[6,7]]);
console.log(arrCopy);//[1,2,3,4,5,Array[2]]传入二维数组后 cancat只能做一次拆分
console.log(arrCopy[5]);//[6,7]

7 .slice()

接受一到两个参数,接受一个起始位置的下标和结束位置的下标,返回中间截取的新数组。

一个参数会返回到数组末尾,两个参数时,指定结尾下标的元素不会被返回。传入负数时会从末尾开始往前算。

var arr = [1,2,3,4,5,6];
var arrCopy1 = arr.slice(1);
var arrCopy2 = arr.slice(1,4);
var arrCopy3 = arr.slice(1,-2);
var arrCopy4 = arr.slice(-4,-1);
console.log(arr)
console.log(arrCopy1);//[2,3,4,5,6]
console.log(arrCopy2);//[2,3,4]
console.log(arrCopy3);//[2,3,4]
console.log(arrCopy4);//[3,4,5]

8 .splice()

splice()方法可以做到删除、插入、替换;

删除:splice()接受两个参数,要删除的第一项和要删除的项数。

插入:splice()接受三个参数,起始位置、要删除的项数(做插入操作时为0)、要插入的任意个项。

替换:同插入,传入要删除的项数,无需与插入项数相等。

splice()会返回一个包含删除的项的数组,如果没有删除项则是一个空数组。

var arr = [1,2,3,4,7];
var arrRemoved = arr.splice(0,2);
console.log(arr);//[3,4,7]
console.log(arrRemoved);//[1,2]
var arrRemoved2 = arr.splice(2,0,5,6);
console.log(arr);//[3,4,5,6,7]
console.log(arrRemoved2);//[]
var arrRemoved3 = arr.splice(1,1,1,2);
console.log(arr);//[3,1,2,5,6,7]
console.log(arrRemoved3 );//[4]

9. indexOf()和lastIndexOf()

indexOf():接收两个参数:要查找的项和(可选的)表示查找起点位置的索引。其中, 从数组的开头(位置 0)开始向后查找。 
lastIndexOf:接收两个参数:要查找的项和(可选的)表示查找起点位置的索引。其中, 从数组的末尾开始向前查找。

这两个方法都返回要查找的项在数组中的位置,或者在没找到的情况下返回-1。在比较第一个参数与数组中的每一项时,会使用全等操作符。

var arr= [1,2,3,4,5,4,3,2,1]
console.log(arr.indexOf(4));//3
console.log(arr.lastIndexOf(4));//5
console.log(arr.indexOf(4,3));//3
console.log(arr.lastIndexOf(4,4));//3
console.log(arr.indexOf("4"));//-1

10 .遍历方法

for()的两种用法

for(var i=0;i<arr.length;i++){
    console.log(arr[i]);
}

for(var j in arr){
    console.log(arr[j]);
}

11 .迭代方法

1. forEach()给数组每一项给定函数,该方法没有返回值。

var arr= [1,2,3,4,5]
arr.forEach(function(item,index,array){
    console.log(index+'-'+item+'-'+array);
})

/*
0-1-1,2,3,4,5
1-2-1,2,3,4,5
2-3-1,2,3,4,5
3-4-1,2,3,4,5
4-5-1,2,3,4,5
*/

2 .some():对数组中的每一项运行给定函数,如果该函数对任一项返回true,则返回true。

var arr= [1,2,3,4,5]
var boo = arr.some(function(value){
    return value>3;
})
console.log(boo);//true

3 every():与some()相反,有任一项返回false,则返回false,反之全部为true则返回true.

var arr= [1,2,3,4,5]
var boo = arr.every(function(value){
    return value>3;
})
console.log(boo);//false

4. filter():对数组的每一项运行给定函数,返回该函数会返回true项组成的数组。

var arr= [1,2,3,4,5]
var a = arr.filter(function(value){
    return value>3;
})
console.log(a);//[4,5]
a[1] = 6;
console.log(a);//[4,6]
console.log(arr);//[1,2,3,4,5]

5. map():对数组的每一项给定函数,返回每次函数调用的结果组成数组。

var arr= [1,2,3,4,5]
var a = arr.map(function(value){
    return value*3;
})
console.log(a);//[ 3, 6, 9, 12, 15 ]
a[1] = 100;
console.log(a);//[ 3, 100, 9, 12, 15 ]
console.log(arr);//[1,2,3,4,5]

对新数组的操作都不会影响原来的数组。

12. ES5新增迭代方法

ES5新增两个归并数组的方法,reduce()和reduceRight()。这两个方法都会迭代数组所有项,然后构建一个返回值。

这两个方法都能接收两个参数:一个在每一项上调用的函数和(可选)作为归并的初始值。

var arr= [1,2,3,4,5];
var sum = arr.reduce(function(pre,cur,index,array){
    console.log("index:"+index+" pre:"+pre+" cur:"+cur);
    return pre+cur;
},10)
/*
index:0 pre:10 cur:1
index:1 pre:11 cur:2
index:2 pre:13 cur:3
index:3 pre:16 cur:4
index:4 pre:20 cur:5
*/

var sumr = arr.reduceRight(function(pre,cur,index,array){
    console.log("index:"+index+" pre:"+pre+" cur:"+cur);
    return pre+cur;
},10)
/*
index:4 pre:10 cur:5
index:3 pre:15 cur:4
index:2 pre:19 cur:3
index:1 pre:22 cur:2
index:0 pre:24 cur:1
*/
console.log(arr);//[ 1, 2, 3, 4, 5 ]
console.log(sum);//25
console.log(sumr);//25

在不传入归并初始值参数时,第一次迭代会传入两个数组项。

var arr= [1,2,3,4,5];
var sum = arr.reduce(function(pre,cur,index,array){
    console.log("index:"+index+" pre:"+pre+" cur:"+cur);
    return pre+cur;
})
/*
index:1 pre:1 cur:2
index:2 pre:3 cur:3
index:3 pre:6 cur:4
index:4 pre:10 cur:5
*/

var sumr = arr.reduceRight(function(pre,cur,index,array){
    console.log("index:"+index+" pre:"+pre+" cur:"+cur);
    return pre+cur;
})
/*
index:3 pre:5 cur:4
index:2 pre:9 cur:3
index:1 pre:12 cur:2
index:0 pre:14 cur:1
*/
console.log(arr);//[ 1, 2, 3, 4, 5 ]
console.log(sum);//15
console.log(sumr);//15

13 .原数组变化或非变化分类

变化:push()和pop(),shift() 和 unshift(),sort(),splice()

非变化:join(),concat(),slice(),indexOf()和 lastIndexOf() (ES5新增),forEach() (ES5新增),some() (ES5新增),fliter() (ES5新增),map() (ES5新增),every() (ES5新增),reduce()和 reduceRight() (ES5新增)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值