本文数组方法总结来源于慕课网《JavaScript深入浅出》课程
一、Array.prototype.join
var arr = [1,2,3];
arr.join(); //"1,2,3"
arr.join("_") //"1_2_3"
function repeatString(str, n) {
return new Array(n+1).join(str);
}
repeatString("u", 3); //"uuu"
repeatString("Love", 5); //"LoveLoveLoveLoveLove"
二、Array.prototype.reverse
var arr = [1,2,3];
arr.reverse(); //[3,2,1]
arr; //[3,2,1]
三、Array.prototype.sort
//sort()函数默认可以按照字母顺序排序
var arr = ["a","d","c","b"];
arr.sort(); //["a","b","c","d"]
//sort()在这里将数组元素转换为String后按"1","2","3","4"排序
arr = [13,24,51,3];
arr.sort(); //[13,24,3,51]
arr; //[13,24,3,51]
//升序排列需要返回负数,反之返回正数
arr.sort(function (a,b){
return a - b;
}); //[3,13,24,51]
四、Array.prototype.concat
//与sort()不同,调用concat方法原数组不会被修改
var arr = [1,2,3];
arr.concat(4,5); //[1,2,3,4,5]
arr; //[1,2,3]
arr.concat([10,11],12); //[1,2,3,10,11,12]
arr.concat([1,[2,3]]); //[1,2,3,1,[2,3]]
五、Array.prototype.slice
//第一个参数为截取数组的起始索引值,第二个参数为截取到的索引值但不返回这个
//索引值对应的值,即slice两个参数对应左闭右开区间
var arr = [1,2,3,4,5]
arr.slice(1,3); //[2,3]
arr.slice(1); //[2,3,4,5]
arr.slice(1,-1); //[2,3,4]
arr.slice(-4,-3); //[2]
六、Array.prototype.splice
//splice会对原数组进行修改
//第一个参数表示删除的起始索引值,第二个参数表示从起始索引值
//开始删除的个数,之后传入的无数个参数即在被删除数值的索引位置
//添加数值
var arr = [1,2,3,4,5];
arr.splice(2); //return [3,4,5]
arr; //[1,2]
var arr = [1,2,3,4,5];
arr.splice(2,2); //return [3,4]
arr; //[1,2,5]
arr = [1,2,3,4,5];
arr.splice(1,1,'a','b'); //return [2]
arr; //[1,'a','b',3,4,5]
七、Array.prototype.forEach
var arr = [1,2,3,4,5];
arr.forEach(function (x,index,a){
console.log(x + '|' + index + '|' + (a === arr));
});
//1|0|true
//2|1|true
//3|2|true
//4|3|true
//5|4|true
八、Array.prototype.map
var arr = [1,2,3];
arr.map(function() {
return x + 10;
}); //[11,12,13]
arr; //[1,2,3]
九、Array.prototype.filter
var arr = [1,2,3,4,5,6,7,8,9,10];
//注意注意!!这里的index是索引值,对应下面的前三个返回值的索引值
//为0,3,6
arr.filter(function(x,index){
return index%3 === 0||x>=8;
}); //return [1,4,7,8,9,10]
arr; //[1,2,3,4,5,6,7,8,9,10]
十、Array.prototype.every&some
var arr = [1,2,3,4,5];
arr.every(function(x) {
return x < 10;
}); //true
arr.every(function(x) {
return x < 3;
}); //false
var arr = [1,2,3,4,5];
arr.some(function() {
return x === 3;
}); //true
arr.some(function() {
return x === 100;
}); //false
十一、Array.prototype.reduce&reduceRight
//reduce函数迭代的时候会把每一次的调用结果
//在下一次调用时传给第一个参数
//这时候第二个参数即是数组中的下一个数值
var arr = [1,2,3];
var sum = arr.reduce(function() {
return x + y;
},0); //6
arr; //[1,2,3]
var arr = [3,9,6];
var max = arr.reduce(function() {
console.log(x + "|" + y);
return x > y ? x : y;
});
//3|9
//9|6
max; //9
//reduceRight()从最右参数开始遍历操作
max = arr.reduceRight(function(x,y) {
console.log(x + "|" + y);
return x > y ? x : y;
});
// 6|9
// 9|3
max; //9
十二、Array.prototype.indexOf&lastIndexOf
//根据传入参数返回数组中对应的索引值,第一个参数为要查找的数值
//第二个参数为开始查找的索引位置
var arr = [1,2,3,2,1];
arr.indexOf(2); // 1
arr.indexOf(99); // -1
arr.indexOf(1,1); // 4
arr.indexOf(1,-3); // 4
arr.indexOf(2,-1); // -1
//lastindexOf从右向左查找
arr.lastindexOf(2); // 3
arr.lastindexOf(2,-2); // 3
arr.lastindexOf(2,-3); //1
十三、Array.isArray
Array.isArray([]); //true
字符串和数组
由于字符串是一个类数组对象,可以利用一些类似数组用法来取值
var str = "hello world";
str.charAt(0); // "h"
str[1]; // e
//call方法可以将参数传入其他对象原型的方法并返回值
//(应该已经理解,不理解回头去看JavaScript语言精粹)
Array.prototype.join.call(str, "_");
//"h_e_l_l_o__w_o_r_l_d"