Array的高阶函数:map、reduce、filter、sort,every,find,findIndex,forEach
发布日期:2021-06-29 11:42:55 浏览次数:2 分类:技术文章

本文共 4883 字,大约阅读时间需要 16 分钟。

目录


map函数:

小写,和之前的Map数据类型不一样,这个是函数。map()方法定义在JavaScript的Array,我们调用Arraymap()方法,传入我们自己的函数,就得到了一个新的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函数:

Arrayfilter()接收一个函数。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

排序

通常规定,对于两个元素xy,如果认为x < y,则返回-1,如果认为x == y,则返回0,如果认为x > y,则返回1,这样,排序算法就不用关心具体的比较过程,而是根据比较结果直接排序。

sort函数:

Arraysort()方法就是用于排序的

  • sort 函数默认按 ASCII 排序Arraysort()方法默认把所有元素先转换为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函数: 

Arraysort()方法就是用于判断数组的所有元素是否满足指定的测试条件(函数参数)。全部满足则返回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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:箭头函数和匿名函数的异同
下一篇:对象的方法(函数),初识this关键字

发表评论

最新留言

不错!
[***.144.177.141]2024年04月09日 23时21分20秒