JS中各种循环遍历方式:for-in,for-of,forEach( 二 )


新数组和原来的数组长度不一定一样 。
let a = [1, 2, 3, 4, 5, 6];let b = a.filter((num, index, a) => {// b 为一个新的数组return num > 3;})console.log(b); //[4,5,6]
4. map()
【JS中各种循环遍历方式:for-in,for-of,forEach】map(): 不改变原数组,返回一个新数组,每个元素为调用函数的结果 。
新数组的长度和原来的是一样的,他只不过是逐一对原来数据里的每个元素进行操作 。
(而改变原数组,且没有返回值)
map()和 () 不同在于他是有 的,并且他会返回一个新数组 。
let a = [1, 2, 3];let b = a.map(function (n) { return n + 1; }); console.log(a); // [1, 2, 3] 原数组并未改变console.log(b); // [2, 3, 4]
map方法接受一个函数作为参数 。该函数调用时,map方法向它传入三个参数:当前成员、当前位置和数组本身 。
[1, 2, 3].map(function(elem, index, arr) { return elem * index;// [0, 2, 6]});
举例
this.list = this.list.map((item, index) => {return {...item,direction: 'left',};});
5. some() 和 every()
some(): 返回一个,判断是否有元素是否符合函数条件 。数组里面所有的元素只要有一个符合条件就返回true 。
every():返回一个,判断每个元素是否符合函数条件 。数组里面所有的元素都符合条件才返回true 。
every 和 some 都只是判断,不做处理,不生成新的数组 。
// every 中每一个元素都要大于3 返回 true, 否则返回 falselet a = [1, 2, 3, 4, 5, 6];let b= a.every((num, index, a) => {return num > 3;})console.log(b) // false // some 中任意一个只要大于3 返回 true, 没有任何一个 返回 falselet c= a.some((num, index, a) => {return num > 3;})console.log(c) // true
使用技巧:
every和some都通过控制的值来跳出循环 。
具体做法是:
every方法返回值是布尔类型,最终返回值为true需要每一次回调函数返回值都为true,如果某一次回调函数返回值为false,则every方法结束对数组的遍历并返回false,所以在想要跳出循环时回调函数 false,因为every会对回调函数中的返回值做的判断处理类似于&& 。
some方法返回值是布尔类型,最终返回值为true只需要任意一次回调函数返回值为true就会结束对数组的遍历,如果每一次回调函数返回值都为false,则some方法就会一直遍历下去并返回false,所以在想要跳出循环时回调函数 true,因为some会对回调函数中的返回值做的判断处理类似于|| 。
实际运用中,如果希望跳出循环时得到的判断值为true的话则用some,如果希望跳出循环时得到的判断值为false的话则用every 。比如在判定用户是否勾选了不可操作的数据,或者是否勾选了一条可以操作的数据可以使用这两个方法遍历循环数组 。
6. (),()
()方法和()方法依次处理数组的每个成员,最终累计为一个值 。
// 累加求和let result = [1, 2, 3, 4, 5].reduce((a, b) => {console.log(a, b);return a + b;})console.log(result);// 1 2// 3 3// 6 4// 10 5//最后结果:15
方法和方法的第一个参数是一个函数 。该函数接受以下四个参数 。
累积变量(必须)sum,默认为数组的第一个成员当前变量(必须),默认为数组的第二个成员当前位置(可选)(从0开始)原数组(可选)
如果要对累积变量指定初值,可以把它放在方法和方法的第二个参数 。