Javascript 高阶函数

本文介绍了JavaScript中高阶函数的应用,如`add`和`pow`,并详细展示了如何使用`map`和`reduce`操作数组。通过实例演示了如何实现`string2int`函数,包括数组过滤(filter)、排序(sort)以及数组方法every(), find(), findIndex()和forEach()的用法。
摘要由CSDN通过智能技术生成


- 高阶函数接收另一个函数作为参数

function add(x, y, f) {
    return f(x) + f(y);
}

- map / reduce

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);

Array 的 reduce() 把一个函数作用在这个 Array 的 [x1, x2, x3...] 上,这个函数必须接收两个参数,reduce() 把结果继续和序列的下一个元素做累积计算

[x1, x2, x3, x4].reduce(f) = f(f(f(x1, x2), x3), x4)

 例:利用map和reduce操作实现一个string2int()函数

function string2int(s) {
    var arr = [];
    for(c of s) {
      arr.push(c);
    }
    return arr.map(c=>(c*1)).reduce((x,y)=>(x*10+y));
}
function string2int2(s) {
    return s.split('').map(x=>(x*1)).reduce((x,y)=>(x*10+y));
}
string.substring(from, to)
string.substr(start,length)

- filter
  - 把Array的某些元素过滤掉,然后返回剩下的元素(返回符合条件的元素)

var arr = [1, 2, 4, 5, 6, 9, 10, 15];
var r = arr.filter(function (x) {
    return x % 2 !== 0;
});
r; // [1, 5, 9, 15]

  - 回调函数:filter()接收的回调函数的第一个参数表示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;
});

- sort
  - Array的sort()方法默认把所有元素先转换为String再排序
  - sort()方法会直接对Array进行修改,它返回的结果仍是当前Array

var arr = [10, 20, 1, 2];
arr.sort(function (x, y) {
    if (x < y) {
        return -1;
    }
    if (x > y) {
        return 1;
    }
    return 0;
  });
console.log(arr); // [1, 2, 10, 20]

- Array
  - `every()`方法可以判断数组的所有元素是否满足测试条件。 

var arr = ['Apple', 'pear', 'orange'];
console.log(arr.every(function (s) {
    return s.length > 0;
})); // true, 因为每个元素都满足s.length>0

  - `find()`方法用于查找符合条件的第一个元素,如果找到了,返回这个元素,否则,返回undefined

var arr = ['Apple', 'pear', 'orange'];
console.log(arr.find(function (s) {
    return s.toLowerCase() === s;
})); // 'pear', 因为pear全部是小写

  - `findIndex()`和`find()`类似,也是查找符合条件的第一个元素,不同之处在于findIndex()会返回这个元素的索引,如果没有找到,返回-1
  - `forEach()`和`map()`类似,它也把每个元素依次作用于传入的函数,但不会返回新的数组

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值