1.操作方法
数组高阶的这几个常用方法都可以遍历数组。
1.1 .map();
.map();方法可以返回一个新的满足条件的数组,数组中的元素为原始数组(原数组)元素元素调用后函数处理的值。并且会按照原始数组的顺序依次处理元素。
注意:.map()
方法不会对空数组进行检测。当返回的是基本数据类型的时候,.map()不会改变原始数组;当返回的不是基本数据类型时,会改变原始数组。
语法:
Array.map(function(currentValue, index, arr),thisValue);
currentValue:
必填;指当前元素。
index:
可选填;数组元素的索引(下标)。
arr:
可选填;指向当前元素所属的数组。
thisValue:
可选填;传递给函数的值一般用"this"
的值。如果这个参数的值为空,"undefined"
就会传递给"this"
的值。
// 需求:把数组中的所有元素转为大小写
let arr = ['peng guo mo', 'nie mao jiao'];
let result = arr.map(function(v,i){
return v.toUpperCase();//转为大写
//return v.toLowerCase();//转为小写
})
console.log(result);
1.2 .find()
.find();方法是ES6
新增的方法;可通过测试查找满足条件(函数内部判断)的数组的第一个元素的值;并且返回。当使用.find();
方法时,可为数组中的每一个元素都调用一次执行函数。当查找到满足条件的数组元素时,.find();
会返回该元素,之后的值就不会再次调用执行函数。如果没有符合条件的元素时就会返回undefined
。
注意:.find()
对于空数组,函数是不会执行的,也并不会改变数组的原始值。
语法:
Array.find(function(currentValue, index, arr),thisValue);
currentValue
:必填;指向当前元素。
index
:可填值;指元素的索引(下标)。
arr
:可填值:指当前元素所属的数组。
thisValue
:可填值:传递给函数的值一般用"this"
的值。如果这个参数的值为空,"undefined"
就会传递给"this"
的值。
//返回的是数组的长度是3的第一个数。
let course = ['html', 'css', 'js', 'jquery', 'promise', 'vue', 'react', 'node.js'];
let result1 = course.find(function(v,i){
return v.length === 3;//css
})
console.log(result1);
1.3 .findIndex();
.findIndex();方法也是ES6
新增的方法;和.find()
相类似。可返回并传入一个满足测试条件(函数)的数组中的第一个元素位置的索引(下标)。可为数组中的每一个元素都调用一次执行函数。当数组中的元素在测试条件中返回true
时,.findIndex()
就返回符合条件的元素的索引位置。如果没有符合条件的元素就返回 -1
。
注意:.findIndex();
对于空数组,函数是不会执行的,也并不会改变数组的原始值。
语法
Array.findIndex(function(currentValue, index, arr), thisValue);
currentValue
:必填;指向当前元素。
index
:可填值;指元素的索引(下标)。
arr
:可填值:指当前元素所属的数组。
thisValue
:可填值:传递给函数的值一般用"this"
的值。如果这个参数的值为空,"undefined"
就会传递给"this"
的值。
let index = ['html', 'css', 'js', 'jquery', 'promise', 'vue', 'react', 'node.js'];
let result2 = index.findIndex(function(v,i){
return v.length === 3;//1 => 找到数组长度是3的索引(下标)。
})
console.log(result2);
1.4 .join();
.join();方法可用于把数组中的所有元素放入一个字符串,也就是将数组转换为字符串。然后通过元素指定的分隔符进行分割。
语法:
arrayObject.join(separator);
separator
:分隔符
let fruits = ['苹果', '香蕉', '橘子', '芒果'];
//let str1 = fruits.join();//苹果,香蕉,橘子,芒果 => 默认为空时会自动加上逗号。
let str1 = fruits.join("");//苹果香蕉橘子芒果
console.log(str1);
1.5 .includes();
.includes();方法也是一个ES6
新增的方法;可返回一个布尔值,表示某个数组是否包含了给定的值,与字符串的includes
方法类似。
语法:
string.includes(searchValue, start);
searchValue
:必填值;要查找的字符串。
start
:可填值;设置从那个位置开始查找,默认为0。
let fruits1 = ['苹果', '香蕉', '橘子', '芒果'];
console.log(fruits1.includes('香蕉',1));//第一个参数是数组里面包含的属性,第二个参数是数组的索引(下标)。
1.6 .reverse();
.reverse();方法可用于颠倒数组中元素的顺序。
语法:
Array.reverse();
let num1 = [1,2,3,4,5];
console.log(num1.reverse());//[5,4,3,2,1]
1.7 .sort();
.sort();方法可用于对数组中的元素进行排序;排序顺序可以是字母或者数字,并按升序或者降序。默认排序顺序是按照字母升序。
注意:当数字是按字母顺序排列时"40"将排在"5"前面,使用数字排序,你必需通过一个函数作为参数来调用。函数指定数字是按照升序还是降序排列。但是这种方法会改变原始数组。
语法:
Array.sort(sortfunction);
let phone = ['oppo','vivo','huangwei','iphone'];
console.log(phone.sort());//如果是字母,则会根据字母的先后顺序进行排序
let data = [1, 2, -1, 10, 14, 30, 25];
let datas = data.sort(function(a,b) {
//return a - b;//升序排列;从小到大
return b - a; //降序排列;从大到小
})
console.log(datas);
1.8 .indexOf();
.indexOf();方法可返回数组中某一个指定的元素的索引;包含返回首次出现位置的索引。然后从头到尾地检索数组,看它是否含有对应的元素。开始检索时的位置会在数组start
处或者数组的开头(没有指定的start
参数时);如果找到一个item
,则返回item
第一次出现时的位置。数组的索引从0开始;如果在数组中没有找到指定元素则会返回 -1。
注意:.indexOf();
方法要区分大小写。
语法:
Array.indexOf(searchvalue, start);
let arrs = ['a', 'b', 'c', 'd', 'e', 'f'];
console.log(arrs.indexOf('b',5));
1.9 .flat();
.flat();方法是ES10
新增的方法;可用于将嵌套的数组"拉平";也就是将多维数组转为指定维数的数组;并返回一个新的数组,对原数组没有影响。
语法:
Array.flat(n);
let total = [1, 2, 3,[4,5, 6,[7,8, 9,[10,11,12,13,14,15]]]]
// console.log(total.flat(3));
console.log(total.flat(Infinity));//Infinity表示正无穷 -Infinity表示负无穷。
1.10 .every();
.every();方法可检测数组中的所有元素是否是都符合给定的某一个条件(通过函数条件);也就是说使用指定的函数检测数组中的所有元素。如果数组中检测有一个元素不满足条件,则整个表达式返回false
,并且剩余的元素不会再进行检测。如果所有的元素都满足条件,则返回true
。
注意:.every();
不会对空数组进行检测;也不会改变原数组。
语法:
Array.every(function(currentValue, index, arr), thisValue);
currentValue
:必填;指向当前元素。
index
:可填值;指元素的索引(下标)。
arr
:可填值:指当前元素所属的数组。
thisValue
:可填值:传递给函数的值一般用"this"
的值。如果这个参数的值为空,"undefined"
就会传递给"this"
的值。
let ages = [12, 13, 14, 15, 16, 17, 18, 19, 20];
let agging = ages.every(function(v,i){
console.log('你猜');
return v > 15;
})
console.log(agging);//false
1.11 .some();
.some();方法可用于检测数组中的元素是否符合给定的某一个条件(函数提供);会依次执行数组的每个元素;如果有一个元素满足条件,则表达式返回true
,剩余的元素不会再执行检测。如果没有满足条件的元素,则返回false
。
注意:.some();
不会对空数组进行检测;也不会改变原始数组。
语法:
array.some(function(currentValue, index, arr), thisValue);
currentValue
:必填;指向当前元素。
index
:可填值;指元素的索引(下标)。
arr
:可填值:指当前元素所属的数组。
thisValue
:可填值:传递给函数的值一般用"this"
的值。如果这个参数的值为空,"undefined"
就会传递给"this"
的值。
let agess = [12, 13, 14, 15, 16, 17, 18, 19, 20];
let result3 = agess.some(function(v){
console.log('aaa');
return v > 30;
})
console.log(result3);
1.12 .slice();
.slice();方法可用于截取数组,从已有的数组中返回选定的元素。也可提取字符串的某个部分,并以新的字符串返回被提取的部分。
注意:.slice();
方法不会改变原数组。
语法:
array.slice(start, end);
start
:可选;规定从何处开始选取。如果是负数,那么它规定从数组尾部开始算起的位置。也就是说,-1 指最后一个元素,-2 指倒数第二个元素,以此类推。
end
:可选;规定从何处结束选取。该参数是数组片断结束处的数组下标。如果没有指定该参数,那么切分的数组包含从 start
到数组结束的所有元素。如果这个参数是负数,那么它规定的是从数组尾部开始算起的元素。
let age = [16, 17, 21, 22, 38, 39];
console.log(age.slice(2));//从数组的索引(下标)中开始截取
console.log(age.slice(2,4));//从数组下标2开始截取,到数组下标4结束截取。
1.13 .filter();
.filter();方法可以过滤数组,把满足条件的返回,会得到一个新的数组。新数组中的元素是通过检查指定数组中符合条件的所有元素。
注意:.filter();
不会对空数组进行检测;也不会改变原数组。
语法:
array.filter(function(currentValue, index, arr), thisValue);
currentValue
:必填;指向当前元素。
index
:可填值;指元素的索引(下标)。
arr
:可填值:指当前元素所属的数组。
thisValue
:可填值:传递给函数的值一般用"this"
的值。如果这个参数的值为空,"undefined"
就会传递给"this"
的值。
let aggess = [12, 13, 14, 15, 16, 17, 18, 19, 20];
let result4 = aggess.filter(function(v){
console.log('aaa');
return v > 15;
})
console.log(result4);