說我有Person對象的數組:排序在JavaScript
var people = [{name: "Joe Schmo", age: 36}, {name: "JANE DOE", age: 40}];
和我有可以排序字符串箱子的陣列不區分大小寫的函數:
function caseInsensitiveSort(arr) { ... }
是否有任何直接的方法來結合我現有的排序功能Array.prototype.map
排序people
陣列只使用name
鍵?
I.e.它會產生
var people = [{name: "JANE DOE", age: 40}, {name: "Joe Schmo", age: 36}];
做手工也不是很難在這種特殊情況下,
people.sort(function (a, b) {
return a.name.localeCompare(b.name);
});
,但我想不出這樣做的一種方式,讓我用預現有的排序功能。在排序功能更加定製的情況下,這將是有用的。
編輯:我相信這裏的核心問題是要做到這一點,你需要能夠弄清楚當你對代理數組進行排序時,原始索引被映射到了什麼位置。在一般情況下,使用JS的本地sort
函數獲得這些新索引似乎不可能。但我很樂意被證明是錯誤的。
編輯:我試圖做到這一點的方式效率太低,無法使用。請參閱下面的答案,使用比較函數替代解決方案。
如果'caseInsensitiveSort'接受一個數組,你需要在名稱的數組給該函數的名稱進行排序,然後基於與名稱陣列上的對象數組排序。聽起來像是一種非常複雜的方式來做簡單的事情。 – adeneo
它會處理幾個元素嗎?因爲'Array.prototype.map'方法創建一個新數組,所以對於數百萬條記錄來說,最好的選擇就是對它進行就地排序。 –
@adeneo @Jordan你們倆都是對的。正如xdazz在下面指出的,正確的方法是將我的比較邏輯抽象爲一個單獨的函數,並將其提供給'Array.prototype.sort',而不是試圖將我的排序函數放入。 –