[js] Array 数组 相关方法
Array.isArray(element)
//Array对象的一个静态函数,判断一个对象是不是数组 。
1 var a = new Array(123); 2 var b = new Date(); 3 console.log(Array.isArray(a)); //true 4 console.log(Array.isArray(b)); //false
Array.forEach(element,index,array)
//遍历数组,参数为一个回调函数,回调函数有三个参数:当前元素,元素索引,整个数组。
//只能遍历数组,不能遍历对象。
//快速遍历数组
1 var a = new Array(1, 2, 3, 4, 5, 6); 2 a.forEach(function(e, i, array) { 3 array[i] = e + 1; 4 }); 5 console.log(a); //[2, 3, 4, 5, 6, 7]
Array.map(function(element))
//遍历数组,回调函数返回值组成一个新数组返回
//新数组索引结构和原数组一致,原数组不变
//快速深复制
1 var a = new Array(1, 2, 3, 4, 5, 6); 2 console.log(a.map(function(e) { 3 return e; 4 })); // [1, 2, 3, 4, 5, 6] 5 console.log(a.map(function(e) { 6 return e * e; 7 })); // [1, 4, 9, 16, 25, 36] 8 console.log(a.map(function(e) { 9 return e % 2 === 0; 10 })); // [false, true, false, true, false, true] 11 console.log(a); //[1, 2, 3, 4, 5, 6]
Array.filter(function(element))
//返回数组的一个子集,回调函数用于逻辑判断是否返回,返回true则把当前元素加入到返回数组中,false则不加
//新数组只包含返回true的值,索引缺失的不包括,原数组保持不变
1 var a = new Array(1, 2, 3, 4, 5, 6); 2 console.log(a.filter(function(e) { 3 return e; 4 })); //[1, 2, 3, 4, 5, 6] 5 console.log(a.filter(function(e) { 6 return e % 2 === 0; 7 })); // [2, 4, 6] 8 console.log(a); //[1, 2, 3, 4, 5, 6]
Array.reduce(function(v1,v2),value) / Array.reduceRight(function(v1,v2),value)
//遍历数组,调用回调函数,将数组元素组合成一个值,reduce从索引最小值开始,reduceRight反向。
//value为可选初始值。例,原始为v1=1,v2=2,v1+v2=3,v1=3,v2=3。value设为100后,v1=100,v2=1。
//也可用于快速拼接字符串
// 当arr为空数组时,默认值为value,也就是以value为起始。不传value为空数组时会报错
1 var a = new Array(1, 2, 3, 4, 5, 6); 2 var aa = a.reduce(function(v1, v2) { 3 console.log(v1); 4 console.log(v2); 5 return v1 + v2; 6 }); 7 console.log(aa); // 21。可用于快速计算数组和。 8 9 10 var bb = a.reduceRight(function(v1, v2) { 11 console.log(v1); 12 console.log(v2); 13 return v1 - v2; 14 }, 100); 15 console.log(bb); // 79
Array.every(function(element, index, array)) / Array.some(function(element, index, array))
//这两个函数类似于离散数学中的逻辑判定, 回调函数返回一个布尔值, every是“所有”函数的每个回调函数都返回true的时候才会返回true, 当遇到false的时候终止执行, 返回false;
//some函数是“存在”一个回调函数返回true的时候终止执行并返回true, 否则返回false。
//在空数组上调用every返回true, some返回false。
1 var a = new Array(1, 2, 3, 4, 5, 6); 2 console.log(a.every(function(e, i, arr) { 3 console.log(i + ' : ' + e); 4 //console.log(arr);//原数组 5 return e < 5; 6 })); 7 /*0 : 1 8 1 : 2 9 2 : 3 10 3 : 4 11 4 : 5 12 false */ 13 var a = new Array(1, 2, 3, 4, 5, 6); 14 console.log(a.some(function(e, i, arr) { 15 console.log(i + ' : ' + e); 16 //console.log(arr);//原数组 17 return e > 4; 18 })); 19 /*0 : 1 20 1 : 2 21 2 : 3 22 3 : 4 23 4 : 5 24 true */
Array.prototype.find()
//返回数组中满足测试条件的一个元素,如果没有满足条件的元素,则返回 undefined。
//区别:findIndex()方法返回的是满足条件的元素的索引,而非它的值。
//质数又称素数,除了1和它本身以外不再有其他的因数。 //最小的质数是2。 function isPrime(element, index, array) { var start = 2; while (start <= Math.sqrt(element)) { if (element % start++ < 1) return false; // if (element % start < 1) { // return false; // } // start++; //循环,start++ 一有除尽的,也就是因数,就结束 } return (element > 1); //不为1 } console.log([4, 6, 8, 12].find(isPrime)); // undefined, not found console.log([4, 51, 8, 12].find(isPrime)); // 5
Array.indexOf(element) / Array.lastIndexOf(element)
//这两个方法用于查找数组内指定元素位置,查找到第一个后返回其索引,没有查找到返回-1,indexOf从头至尾搜索,lastIndexOf反向搜索。
//也可用于检索字符串
1 var a = new Array(1, 2, 3, 3, 2, 1); 2 console.log(a.indexOf(2)); //1 3 console.log(a.lastIndexOf(2)); //4
String.prototype.trim()
//用于去除字符串首尾的空白符(不只是空格,还有tab、垂直制表符啊神马的)和换行符,不改变原字符串值
1 var s = ' 123 \n'; 2 console.log(s.length);//6 3 console.log(s.trim());//123 4 console.log(s.trim().length);//3 5 console.log(s); // 123 6 console.log(s.length); //6
#Array.prototype.concat
将传入的数组或非数组值与原数组合并,组成一个新的数组并返回.
var new_array = old_array.concat(value1[, value2[, ...[, valueN]]])
```
var alpha = ["a", "b", "c"];
var numeric = [1, 2, 3];
// 组成新数组 ["a", "b", "c", 1, 2, 3]; 原数组 alpha 和 numeric 未被修改
var alphaNumeric = alpha.concat(numeric);
console.log(alphaNumeric);
```
```
var num1 = [1, 2, 3];
var num2 = [4, 5, 6];
var num3 = [7, 8, 9];
// 组成新数组[1, 2, 3, 4, 5, 6, 7, 8, 9]; 原数组 num1, num2, num3 未被修改
var nums = num1.concat(num2, num3);
console.log(nums);
```
```
var alpha2 = ['a', 'b', 'c'];
// 组成新数组 ["a", "b", "c", 1, 2, 3], 原alpha数组未被修改
var alphaNumeric2 = alpha2.concat(1, [2, 3]);
console.log(alphaNumeric2);
```
```
var a = ['a', 'b', 'c'];
var b = a.concat(1, ['a','b']);
//["a", "b", "c", 1, "a", "b"]
console.log(b);
```
#Array.prototype.join()
将数组中的所有元素连接成一个字符串。
str = arr.join([separator = ','])
```
var a = ['Wind', 'Rain', 'Fire'];
var myVar1 = a.join(); // myVar1的值变为"Wind,Rain,Fire"
var myVar2 = a.join(', '); // myVar2的值变为"Wind, Rain, Fire"
var myVar3 = a.join(' + '); // myVar3的值变为"Wind + Rain + Fire"
var myVar4 = a.join(''); // myVar4的值变为"WindRainFire"
```