Array.forEach()
该方法接收三个参数(value元素项,index元素索引,array数组本身)
var txt = ""; var numbers = [45, 4, 9, 16, 25]; numbers.forEach(myFunction); function myFunction(value, index, array) { txt = txt + value + "<br>"; }
- forEach()函数没有返回值;
- 通常,在
for
循环中跳出循环可以用break
或者continue
来跳出循环。break
:跳出循环;continue
:跳过当次循环。而有时候需要在foreach
中跳出循环,该怎么做呢?- forEach()终止或者跳出循环,除非抛出异常throw Error(),
forEach
不能使用break
和continue
这两个关键字,会直接报错,因为forEach
本身无法跳出循环,必须遍历所有的数据才能结束,它传入的是一个回调函数,因此形成了一个作用域,它内部所定义的变量不会像for循环一样污染全局变量。return
语句的作用只能跳出当前循环(实现了continue
的效果),并不能跳出整个循环.- 所有浏览器都支持
Array.forEach()
,除了 Internet Explorer 8 或更早的版本:
Array.map()
该方法接收三个参数(value元素项,index元素索引,array数组本身)
var numbers1 = [45, 4, 9, 16, 25]; var numbers2 = numbers1.map(myFunction); function myFunction(value, index, array) { return value * 2; }
- map() 方法返回一个新数组, 新数组中的元素为原始数组中的每个元素调用函数处理后得到的值。
- map() 不会对空数组进行检测
map()
方法不会更改原始数组。map() 不会改变《基础数据类型的》原数组,就是说基础类型的数组在修改item
时并不会改变原数组- 对象数组map()循环对象数组,对象数组在修改
item 项
时会改变原数组- map方法循环原始数组时,如果在调用callback函数对原始数组进行添加或者删除元素的操作,那就map返回的值则会直接改变原始数组,存在的数组元素改变了,那么传给
callback
的值是map
访问该元素时的值。- 调用
map
方法之后 追加 的数组元素不会被callback
访问。- 数组的Map方法详解_wflynn的博客-CSDN博客_数组map用法
Array.filter()
该方法接收三个参数(value元素项,index元素索引,array数组本身)
var numbers = [45, 4, 9, 16, 25]; var over18 = numbers.filter(myFunction); function myFunction(value, index, array) { return value > 18; }
filter()
方法创建一个,通过检查 指定数组中 符合条件的 所有元素后 返还这部分元素的新数组。- 所有浏览器都支持
Array.filter()
,除了 Internet Explorer 8 或更早的版本:- filter方法不会对空数组进行检测,不会改变原始数组
Array.reduce()
该方法接收四个参数(total总数(初始值/先前返回的值),value元素项,index元素索引,array数组本身)
var numbers1 = [45, 4, 9, 16, 25]; var sum = numbers1.reduce(myFunction); function myFunction(total, value, index, array) { return total + value; }
- reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。对空数组是不会执行回调函数的。
reduce()
方法能够接受一个初始值:比如接收一个对象作为初始值,统计一个数组中有多少个不重复的单词: var arr = ["apple","orange","apple","orange","pear","orange"]; function getWordCnt(){ return arr.reduce(function(prev,next){ prev[next] = (prev[next] + 1) || 1; return prev; },{}); } console.log(getWordCnt());//{apple: 2, orange: 3, pear: 1} // 上述例子不用不用reduce时: var arr = ["beijing","shanghai","beijing","shanghai","guangzhou","shanghai"]; function getWordCnt(){ var obj = {}; for(var i= 0, l = arr.length; i< l; i++){ var item = arr[i]; obj[item] = (obj[item] +1 ) || 1; } return obj; } console.log(getWordCnt());//{beijing: 2, shanghai: 3, guangzhou: 1} 数组对象利用reduce求和: let list = [{Price: 1,Num: 3}, {Price:2,Num: 6}, {Price: 3,Num: 9}] let a = this.list.reduce((p, r) => { p += r.Price * r.Num return p }, 0) console.log(a) //42 利用reduce合并二维数组 var twoArr = [['mu','zi'],['dig','big'],['lucky','jiji']]; var oneArr = twoArr.reduce(function(total,currentValue){ // console.log(total) return total.concat(currentValue); }) console.log(oneArr);//["mu", "zi", "dig", "big", "lucky", "jiji"]
Array.reduceRight()
reduceRight()
方法在数组中从右到左工作,参阅 reduce(),只是执行顺序相反。
Array.every()
every()
方法检查所有数组值是否通过测试,返回值为布尔值。该方法接收三个参数(value元素项,index元素索引,array数组本身)
检查所有数组值是否大于 18:返回结果为false var numbers = [45, 4, 9, 16, 25]; var allOver18 = numbers.every(myFunction); //false function myFunction(value, index, array) { return value > 18; }
Array.some()
some()
方法检查某些数组值是否通过了测试,返回值为布尔值。该方法接收三个参数(value元素项,index元素索引,array数组本身)
检查所有数组值是否大于 18:返回结果为true var numbers = [45, 4, 9, 16, 25]; var allOver18 = numbers.some(myFunction); //true function myFunction(value, index, array) { return value > 18; }
Array.find()
find()
方法返回通过测试函数的第一个数组元素的值。
该方法接收三个参数(value元素项,index元素索引,array数组本身)查找(返回)大于 18 的第一个元素的值: var numbers = [4, 9, 16, 25, 29]; var first = numbers.find(myFunction); //25 function myFunction(value, index, array) { return value > 18; }
find()
方法不改变原始数组
Array.findIndex()
findIndex()
方法返回通过测试函数的第一个数组元素的位置索引。该方法接收三个参数(value元素项,index元素索引,array数组本身)
查找大于 18 的第一个元素的索引: var numbers = [4, 9, 16, 25, 29]; var first = numbers.findIndex(myFunction); function myFunction(value, index, array) { return value > 18; }
Array.indexOf()
indexOf()
方法在数组中搜索元素值并返回其位置索引,indexof方法也可以用来检索字符串中指定字符的位置语法 array.indexOf(item, start)
item 必需。要检索的项目。 start 可选。从哪里开始搜索。负值将从结尾开始的给定位置开始,并搜索到结尾。 检索数组中的项目 "Apple": var fruits = ["Apple", "Orange", "Apple", "Mango"]; var a = fruits.indexOf("Apple"); //0
- 如果项目多次出现,则返回第一次出现的位置。开始位置的索引为 0。
- 如果在数组中没找到指定元素则返回 -1。
Array.lastIndexOf()
Array.lastIndexOf()
与Array.indexOf()
类似,但是从数组结尾开始搜索。