- 高阶函数接收另一个函数作为参数
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()`类似,它也把每个元素依次作用于传入的函数,但不会返回新的数组