以下内容若有问题烦请即时告知我予以修改,以免误导更多人。
- filter
- map
- reduce
- 计算重复单词
- array.reduce(fn, value)
- 累加
- 初始值的重要性
- sort
- 添加函数
- every
- forEach
- $.inArray()
- 应用
5个数组Array方法: indexOf、filter、forEach、map、reduce使用实例
【译】高阶函数:利用Filter、Map和Reduce来编写更易维护的代码
- forEach没有返回值,重点是function里面处理逻辑
- map有返回值,重点是function返回值,组成新数组
- filter有返回值,重点是function返回值,过滤之后组成新数组
- reduce有返回值,重点是计算数组,返回一个值
一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数。
filter
创建一个新的匹配过滤条件的数组。
- filter() 不会对空数组进行检测
- filter() 不会改变原始数组
array.filter(function(currentValue,index,arr), thisValue)
返回Array 类型//符合条件的值组成的数组
- 不用filter()时
1 | var arr = [ |
- 用filter()时
1 | var arr = [ |
map
map()对数组的每个元素进行一定操作(映射)后,会返回一个新的数组。
返回 array 数组// 每个回调的返回值组成的新数组
- 不用map()时
1 | var oldArr = [{first_name:"Colin",last_name:"Toh"},{first_name:"Addy",last_name:"Osmani"},{first_name:"Yehuda",last_name:"Katz"}]; |
- 用map()时
1 | var oldArr = [{first_name:"Colin",last_name:"Toh"},{first_name:"Addy",last_name:"Osmani"},{first_name:"Yehuda",last_name:"Katz"}]; |
你应该知道的 JavaScript Array.map() 的 5 种用途
reduce
实现一个累加器的功能,将数组的每个值(从左到右)将其降低到一个值。
返回最后一次回调的值
相当于[x1, x2, x3, x4].reduce(f) = f(f(f(x1, x2), x3), x4)
计算重复单词
- 不用reduce()时
1 | var arr = ["apple","orange","apple","orange","pear","orange"]; |
- 用reduce()时
注意reduce内function后的{}
1 | var arr = ["apple","orange","apple","orange","pear","orange"]; |
array.reduce(fn, value)
array.reduce(function(total, currentValue, currentIndex, arr), initialValue)
- total 必需。初始值, 或者计算结束后的返回值。
- currentValue 必需。当前元素
- currentIndex 可选。当前元素的索引
- arr 可选。当前元素所属的数组对象。
- initialValue 可选。传递给函数的初始值
累加
1 | var numbers = [65, 44, 12, 4]; |
初始值的重要性
一般来讲prev是从数组中第一个元素开始的,next是第二个元素。但是当你传入初始值(initialValue)后,第一个prev将是initivalValue,next将是数组中的第一个元素。
1 | var arr = ["apple","orange"]; |
sort
数组排序
PS: 字符串根据ASCII码进行排序 eg: A-65 a-97
Array的sort()方法默认把所有元素先转换为String再排序!
1 | ['Banana', 'Apple', 'Orange'].sort(); // ['Apple', 'Banana', 'Orange']; |
添加函数
- 从小到大
方法一1
2
3
4
5
6
7
8
9
10
11var 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]
方法二1
2
3arr.sort(function(n1, n2){
return n1-n2; // 可理解为:当n1-n2为正值即n1>n2时,需调换顺序,则为大的向后挪,小的向前挪 -> 升序
});
- 从大到小
方法一1
2
3
4
5
6
7
8
9
10var arr = [10, 20, 1, 2];
arr.sort(function (x, y) {
if (x < y) {
return 1;
}
if (x > y) {
return -1;
}
return 0;
}); // [20, 10, 2, 1]
方法二1
2
3arr.sort(function(n1, n2){
return n2-n1; // 可理解为:当n2-n1为正值即n2>n1时,需调换顺序,则为大的向前挪,小的向后挪 -> 降序
});
every
every可以判断数组的所有元素是否满足测试条件。
1 | var arr = ['Apple', 'pear', 'orange']; |
forEach
为每个元素执行对应的方法
undefined// 这个东西没有返回值
- 不用forEach()时
1 | var arr = [1,2,3,4,5,6,7,8]; |
- 用forEach()时
1 | arr.forEach(function(item,index){ |
$.inArray()
- $.inArray(item, array)
1 | handleFav: function() { |
应用
- 有一组用户信息按手机号降序排序,输出用户名称,用逗号分隔
1 | [{name: 'l1', phone: '1507539'},{name: 'l2', phone: '1507540'},{name: 'l3', phone: '1507541'},{name: 'l4', phone: '1507538'}] |
- 给元素绑事件
1 | [].slice.call(document.querySelectorAll('div')) |
- 获取所有元素的class,过滤空串
1 | [].slice.call(document.querySelectorAll('*')) |
洗牌
1
2
3
4
5
6
7
8
9//随机排序
String.prototype.shuffle = function(arr) {
return arr.sort(function() {
return .5 - Math.random()
})
}
var a = [1,3,4,0,2];
var b = a.suffle(); // [3, 1, 0, 4, 2]赋值
1 | { |
- 数组去重
1 | var r,arr = ['apple', 'strawberry', 'banana', 'pear', 'apple', 'orange', 'orange', 'strawberry']; |
更多内容可以订阅本人微信公众号,一起开启前端小白进阶的世界!