判断数组的通用方法:Object.prototype.toString.call(变量名) === "[object Array]"
进入正题:
一、不改变原数组,生成新数组:
1.split()按指定字符串进行分割,分割前为字符串,分割后为新数组
例: var a= "a,b,c"
var b= a.split(,)
console.log(b) // ["a", "b", "c"] 新数组
console.log(b) // a,b,c 原字符串
2.join()按选定字符串进行合并,合并前为数组,合并后为新字符串
var a = ["a","b","c"]
var b = a.join("-")
console.log(b) //a-b-c 新字符串
console.log(b) // ["a","b","c"] 原数组
3.concat()将两数组连接成一个新数组
var a = ["a","b","c"]
var c = a.concat("d")
console.log(a) // ["a","b","c"] 原数组
console.log(c) // ["a","b","c","d"] 原数组
4.chatAt()返回指定下标位置的字符,起始值为0
var a = "abcd"
var b = a.charAt(0)
console.log(b) //a 返回下标为0的字符
5.charCodeAt()返回指定位置的字符的Unicode编码
var a = "abcd"
var b = a.charCodeAt(0)
console.log(b) //97 a的Unicode编码是97
6.slice(strat,end) strat是必需项,表示开始截取的下标位置。end是可选项,表示停止截取的下标位置(注意此位置不被截取)。如果strat是负数,那从数组尾部开始截取,若end下标小于等于start下标,则截取不到,内容为undefined。允许负数。
var a = "abcd"
var b = a.slice(1,2)//截取下标1的字符串
var c = a.slice(0,2) //截取下标0和1组成的字符串
var d = a.slice(-2,2)
console.log(b,c,d)//b ab undefied
7.substr(start,length)strat是必需项,end是可选项。如果length是负数或0,返回空字符串。
var a = "abcd"
var b = a.substr(-2,2)
console.log(b) // cd
8.substring(start,end)strat是必需项。end是可选项,表示停止截取的下标位置(注意此位置不被截取)。如果start与end相等,返回空字符串。如果两者中有负数,则替换为0。如果start大于end,则交换位置。
var a = "abcd"
var b = a.substring(-2,2) //a: abcd b:ab
9.includes这个方法用来判断数组中是否存在该元素,参数是具体的数组元素,他与indexOf()相比更优,indexOf()返回的是数组中元素的位置,且不能解析NaN,会把数组中的NaN漏掉,因此includes更优
10.indexOf:获取字符第一个下标位置
lastIndexOf:获取字符最后一个下标位置
var a= [1,2,2,4]
var b= a.indexOf(2) //a:[1,2,2,4] b:1
var c= a.lastIndexOf(2) //a:[1,2,2,4] b:2
11.find()该方法找到第一个符合条件的成员。返回值是数组的成员,不是索引。找不到返回undefined
var a= [1,2,2,4]
var d= a.find(function(x){
return x>1
})
//d:[1,2,2,4] b:2 找到第一个符合条件的成员2
12.findIndex()返回成员的位置。没找到返回-1输入是回调函数,所有数组成员一次执行该函数,直到找到第一个返回值为true的成员。回调函数可以接受三个参数,依次为值,位置,原数组。
var arr = [1,2,3,4,5,5,5];
var arr1 = arr.findIndex(function(x){
return x == 5;
}); //arr1 = 4 返回满足x==5的成员的下标4
等同于下面:
var arr2 = arr.indexOf(5); //arr2 = 4
二、改变原数组,生成新数组:
1.通用方法—splice(start,删除长度,插入项目...)
var a =[1,2,3,4]
var b=a.splice(0,2,55,66)//a:[55,66,2,3,4] b:55,66
2.shift:删除原数组第一项,返回删除的值。如果数组为空返回undefined,可用splice(0,1)代替
var a= [1,2,3,4]
var b = a.shift() //a:[2,3,4] b:1
3.unshift:将参数加到原数组开头,返回数组长度。
var a= [1,2,3,4]
var b = a.unshift(1,-1) //a:[1,-1,2,3,4] b:5
这个方法的返回值不可靠,可用splice(0,0,加入项目)代替
4.pop删除原数组最后一项,返回删除的值。如果数组为空返回undefined,可用splice(原数组.length-1,0,插入项目)代替
var a= [1,2,3,4]
var b = a.pop() //a:[1,2,3] b:4
5.push将参数追加到原数组末尾,返回数组长度
var a= [1,2,3,4]
var b = a.push(5,6) //a:[1,2,3,4,5,6] b:5,6
6.将数组反转
var a= [1,2,3,4]
var b=a.reverse() //a:[1,2,3,4] b:[4,3,2,1]
7.将数组排序
var a= [1,4,3,2]
var b=a.reverse() //a:[1,2,3,4] b:[1,2,3,4]
三、迭代方法
1.every()这个方法是测试数组的所有元素是否都通过了指定函数的测试,每一项都返回true,则返回true
var arr = [1,2,3,4,5];
var arr1 = arr.every(function(x){
return x<3;
}) //false
2.some()与every()相似,区别在于任意一项返回true,则返回true
var arr = [1,2,3,4,5];
var arr1 = arr.some(function(x){
return x<3;
}) //true
3.filter:将数组元素执行特定函数,而返回一个子集。输入是执行逻辑判断的函数,该函数返回true或false,输出是判定为true的元素。
var arr = [1,2,3,4,5];
var arr1 = arr.filter(function(x){
return x<3;
}) //arr1 = [1,2]
4.foreach:为每个元素调用指定函数。改变数组本身。函数的参数依次是:数组元素,元素的索引,数组本身。
这种方法不能使用break语句跳出循环,也不能使用return语句从闭包函数中返回。
var arr = [1,2,3,4];
arr.forEach(function(element,index,arr1){
arr1[index] = element+1;
}) // arr = [2, 3, 4, 5]
5.map:调用的数组的每一个元素传递给指定的函数,并返回一个新数组。不改变原数组。函数的参数只有传进来的数组元素。
var arr = [1,2,3,4,5];
var arr1 = arr.map(function(x){
return x*x; //一对一的关系,传进来一个值,返回一个对应的值。
}) //arr1 = [1,4,9,16,25]
6.for in:这种方法不仅数组本身元素将被遍历到,那些由用户添加的附加元素也将被遍历到,甚至连数组原型中的属性也将被遍历到。甚至在某些情况下,上面代码将会以任意顺序去遍历数组元素。
for…in是用于遍历包含键值对(key-value)的对象,对数组并不是那么友好。
由于每次迭代操作要搜索实例或原型属性, for-in 循环会产生更多开销,因此执行速度比其他循环类型慢。
7.for of是由es6提出的,目的是作为遍历所有数据结构的统一方法。
foreach是为便利数组而设计的,不能正确响应break、continue和return语句
for in被设计用来枚举对象的属性的,遍历对象的属性
for in用在数组上,除了遍历数组元素还会遍历自定义属性,甚至原型链上的属性,另外,遍历顺序是随机的
for of语法同for in一样简洁,但避开了for in的缺陷
跟for in不一样,数组的遍历器接口只返回具有数字索引的属性
for in读取的是对象的键名,for of读取的是键值
避开了foreach缺陷能正确响应break、continue和return语句
提供遍历所有数据结构的统一方法。for of不仅可以遍历数组,还可以遍历Set、Map结构,某些类似数组的对象(如:argument对象、DOM NodeList对象),Generator对象,以及字符串。
四、归并方法
1.reduce::使用指定的函数将数组元素进行组合生成单个值。
求和:
var arr = [1,2,3,4,5,5,5];
var sum = arr.reduce(function(prev,curr,index,array){
return prev+curr;
}) //sum = 25
将多个数组合并成一个数组:
var arr = [1,2,3,4,5],
arr1 = [6,7,8,9],
arr2 = [10,11,12];
var newArr = [arr,arr1,arr2];
var ret = newArr.reduce(function(a,b){
return a.concat(b);
}) // ret = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
2.reduceRigth:该方法的功能和reduce功能是一样的,不同的是 reduceRight() 从数组的末尾向前将数组中的数组项做累加。
注意: reduce() 对于空数组是不会执行回调函数的。
备注:本文章仅供自我学习总结,感谢相关作者的分享: