本文共 4883 字,大约阅读时间需要 16 分钟。
目录
map函数:
小写,和之前的Map数据类型不一样,这个是函数。map()
方法定义在JavaScript的Array
中,我们调用Array
的map()
方法,传入我们自己的函数,就得到了一个新的Array
作为结果:
'use strict';function pow(x) { return x * x;}var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];var results = arr.map(pow); // 返回平方[1, 4, 9, 16, 25, 36, 49, 64, 81]console.log(results);var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];arr.map(String); // 转成字符['1', '2', '3', '4', '5', '6', '7', '8', '9']
reduce函数:
Array的reduce()
把一个函数作用在这个Array
的[x1, x2, x3...]
上,这个函数必须接收两个参数,reduce()
把结果继续和序列的下一个元素做累积计算,其效果就是:
[x1, x2, x3, x4].reduce(f) = f(f(f(x1, x2), x3), x4)
举例:
'use strict';// 1.利用map和reduce操作实现一个string2int()函数,例如‘123’变成123function string2int(s) { let arr = s.split('').map((x) => x*1); return arr.reduce((x, y)=>x * 10 + y); }// 2.变为首字母大写,其他小写的规范名字function normalize(arr) { return arr.map(x=>x[0].toUpperCase()+x.substring(1).toLowerCase()); }// 3.把字符串变成整数var arr = ['1', '2', '3'];var r;r = arr.map(x=>parseInt(x)); // 或者 r = arr.map(val => val*1);
filter函数:
Array
的filter()
接收一个函数。filter()
把传入的函数依次作用于每个元素,然后根据返回值是true
还是false
决定保留还是丢弃该元素。可见用filter()
这个高阶函数,关键在于正确实现一个“筛选”函数。
// 删除空格var arr = ['A', '', 'B', null, undefined, 'C', ' '];var r = arr.filter(function (s) { return s && s.trim(); // 注意:IE9以下的版本没有trim()方法,空字符串是false});r; // ['A', 'B', 'C']
filter()
接收的函数(一般称为回调函数,比如上面的function(s))其实可以有多个参数。通常我们仅使用第一个参数,表示Array
的某个元素。回调函数还可以接收另外两个参数,表示元素的位置和数组本身,参数名字任意选取,但是位置的定义固定了,从左到右是元素,元素位置,数组本身。
var arr = ['A', 'B', 'C'];var r = arr.filter(function (element, index, self) { //里面的参数名字可以任意选取,按顺序定义 console.log(element); // 依次打印'A', 'B', 'C' console.log(index); // 依次打印0, 1, 2 console.log(self); // self就是变量arr return true;});//删除数组中重复的名字'use strict';var r, arr = ['apple', 'strawberry', 'banana', 'pear', 'apple', 'orange', 'orange', 'strawberry'];r = arr.filter(function (element, index, self) { return self.indexOf(element) === index;});
筛选出素数。
//筛选出素数来,使用filter//'use strict';var x, r, arr = [];for (x = 1; x < 100; x++) { arr.push(x);}function get_primes(arr){ return arr.filter(function(x) {if (x===0 || x===1){ return false;} if (x===2){ return true;} for (let i=2; i
排序
通常规定,对于两个元素x
和y
,如果认为x < y
,则返回-1
,如果认为x == y
,则返回0
,如果认为x > y
,则返回1
,这样,排序算法就不用关心具体的比较过程,而是根据比较结果直接排序。
sort函数:
Array
的sort()
方法就是用于排序的
- sort 函数默认按 ASCII 排序。
Array
的sort()
方法默认把所有元素先转换为String再排序,结果'10'
排在了'2'
的前面,因为字符'1'
比字符'2'
的ASCII码小。 sort()
方法也是一个高阶函数,它可以接收一个比较函数来实现自定义的排序。sort()
方法会直接对Array
进行修改,它返回的结果仍是当前Array。
- sort 函数的底层是用 TimSort 算法实现的,这个算法是工业级算法,Python,JAVA 的 sort 函数底层都是这个
-
返回1,表示前后两个相邻元素要换位置,-1和0不换。比如:如果x = 10 ,y = 5 x > y return 1。当x>y的时候要交换位置,那么就是升序排序。如果x = 10,y = 20 y > x return 1.表示当y>x的时候要交换位置,那么表示降序排序。// 对数字的排序var arr = [10, 20, 1, 2];arr.sort(function (x, y) { if (x < y) { return 1; } if (x > y) { return -1; } return 0;}); // 排序后的arr=[20, 10, 2, 1]//基于上述说法,也可以简写成如下arr.sort((x,y)=>x
y-x); // 倒序,从大到小// 对字母排序var arr = ['Google', 'apple', 'Microsoft'];arr.sort(function (s1, s2) { x1 = s1.toUpperCase(); x2 = s2.toUpperCase(); if (x1 < x2) { return -1; } if (x1 > x2) { return 1; } return 0;}); // 顺排序后的arr=['apple', 'Google', 'Microsoft']arr.sort(function(x,y){x = x.toUpperCase();y = y.toUpperCase();return x>y;})var a1 = ['B', 'A', 'C'];var a2 = a1.sort();a1; // ['A', 'B', 'C']a2; // ['A', 'B', 'C']a1 === a2; // 会原地修改并且返回当前的arr,结果为true, a1和a2是同一对象
every函数:
Array
的sort()
方法就是用于判断数组的所有元素是否满足指定的测试条件(函数参数)。全部满足则返回true,否则返回false。
var arr = ['Apple', 'pear', 'orange'];console.log(arr.every(function (s) { return s.length > 0;})); // true, 因为每个元素都满足s.length>0console.log(arr.every(function (s) { return s.toLowerCase() === s;})); // false, 因为不是每个元素都全部是小写
find函数:
find()
方法用于查找符合指定条件的第一个元素,如果找到了,返回这个元素,否则,返回undefined
:
'use strict';var arr = ['Apple', 'pear', 'orange'];console.log(arr.find(function (s) { return s.toLowerCase() === s;})); // 'pear', 因为pear全部是小写console.log(arr.find(function (s) { return s.toUpperCase() === s;})); // undefined, 因为没有全部是大写的元素
findIndex函数:
findIndex()
和find()
类似,也是查找符合条件的第一个元素,不同之处在于findIndex()
会返回这个元素的索引,如果没有找到,返回-1。
'use strict';var arr = ['Apple', 'pear', 'orange'];console.log(arr.findIndex(function (s) { return s.toLowerCase() === s;})); // 1, 因为'pear'的索引是1console.log(arr.findIndex(function (s) { return s.toUpperCase() === s;})); // -1
forEach函数:
forEach()
和map()
类似,它调用每个元素依次作用于传入的函数,但不会返回新的数组。forEach()
常用于遍历数组,因此,传入的函数不需要返回值。注意: forEach() 对于空数组是不会执行回调函数的。
array.forEach(function(currentValue, index, arr), thisValue)
计算数组所有元素相加的总和:var sum = 0;var numbers = [65, 44, 12, 4];function sum(item) { sum += item;}numbers.forEach(myFunction); // sum的值为125将数组中的所有值乘以特定数字10:function multiply(item,index,arr) { arr[index] = item * 10;}numbers.forEach(multiply); // numbers=[ 650, 440, 120, 40 ]
转载地址:https://blog.csdn.net/zz2230633069/article/details/108233608 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!