<span style="color: #c7254e;">sort</span>:方法對數組成員進行排序,默認是按照字典順序排序。排序后,原數組將被改變。
~~~
['d', 'c', 'b', 'a'].sort()
// ['a', 'b', 'c', 'd']
[4, 3, 2, 1].sort()
// [1, 2, 3, 4]
[11, 101].sort()
// [101, 11]
[10111, 1101, 111].sort()
// [10111, 1101, 111]
~~~
上面代碼的最后兩個例子,需要特殊注意。sort方法不是按照大小排序,而是按照對應字符串的字典順序排序。也就是說,數值會被先轉成字符串,再按照字典順序進行比較,所以101排在11的前面。
如果想讓sort方法按照自定義方式排序,可以傳入一個函數作為參數,表示按照自定義方法進行排序。該函數本身又接受兩個參數,表示進行比較的兩個元素。如果返回值大于0,表示第一個元素排在第二個元素后面;其他情況下,都是第一個元素排在第二個元素前面。
~~~
[10111, 1101, 111].sort(function (a, b) {
return a - b;
})
// [111, 1101, 10111]
~~~
map方法接受一個函數作為參數。該函數調用時,map方法會將其傳入三個參數,分別是當前成員、當前位置和數組本身。
~~~
[1, 2, 3].map(function(elem, index, arr) {
return elem * index;
});
// [0, 2, 6]
~~~
map方法不僅可以用于數組,還可以用于字符串,用來遍歷字符串的每個字符。但是,不能直接使用,而要通過函數的call方法間接使用,或者先將字符串轉為數組,然后使用。
~~~
var upper = function (x) {
return x.toUpperCase();
};
[].map.call('abc', upper)
// [ 'A', 'B', 'C' ]
// 或者
'abc'.split('').map(upper)
// [ 'A', 'B', 'C' ]
~~~
map方法還可以接受第二個參數,表示回調函數執行時this所指向的對象。
~~~
var arr = ['a', 'b', 'c'];
[1, 2].map(function(e){
return this[e];
}, arr)
// ['b', 'c']
~~~