filter()
1.1 顾名思义filter()
是一个具有过滤功能的函数
filter()
也是Array
的一个函数。它接收一个函数,然后根据此函数的返回布尔值决定是否丢弃该元素。true:保留;false:丢弃:
//去耦
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]
1.2 filter()
接收的函数可以有多个参数。通常我们只使用第一个参数,第二参数和第三个参数表示元素的位置和数组本身:
//去重
var arr = ["1", "2", "4", "2", "1"];
var r = arr.filter(function (element, index, self) {
return self.indexOf(element) === index;
});
r; // [1, 2, 4]
sort()
2.1 排序也是在程序中经常用到的算法。无论使用冒泡排序还是快速排序,排序的核心是比较两个元素的大小。如果是数字,我们可以直接比较,但如果是字符串或者两个对象呢?直接比较数学上的大小是没有意义的,因此,比较的过程必须通过函数抽象出来。通常规定,对于两个元素x和y,如果认为x < y,则返回-1,如果认为x == y,则返回0,如果认为x > y,则返回1,这样,排序算法就不用关心具体的比较过程,而是根据比较结果直接排序
JavaScript的Array的sort()方法就是用于排序的,但是排序结果可能让你大吃一惊:
// 看上去正常的结果:
['Google', 'Apple', 'Microsoft'].sort(); // ['Apple', 'Google', 'Microsoft'];
// apple排在了最后:
['Google', 'apple', 'Microsoft'].sort(); // ['Google', 'Microsoft", 'apple']
// 无法理解的结果:
[10, 20, 1, 2].sort(); // [1, 10, 2, 20]
/*
1. 第二个排序把apple排在了最后,是因为字符串根据ASCII码进行排序,而小写字母a的ASCII码在大写字母之后。
2. 第三个排序结果是什么鬼?简单的数字排序都能错?
这是因为Array的sort()方法默认把所有元素先转换为String再排序,结果'10'排在了'2'的前面,因为字符'1'比字符'2'的ASCII码小。
*/
sort()
方法也是一个高阶函数,它还可以接收一个比较函数来实现自定义的排序:
var arr = [10, 20, 1, 2];
arr.sort(function (x, y) {
if (x < y) {
return -1;
}
if (x > y) {
return 1;
}
return 0;
}); // [1, 2, 10, 20]
注意:JS中的sort()
函数修改调用者本身,而Swift中sorted()
函数返回一个新的数组