Код метода родной сортировки Javascript - PullRequest
6 голосов
/ 10 июля 2011

Любая идея, как я могу увидеть реализацию нативных методов javascript, в частности, сортировку метод. Причина, по которой я ищу это, мне просто интересно, какой алгоритм используется и в чем его сложность.

Я сортирую огромный объект json в javascript, и мне было интересно, должен ли я написать свой собственный mety hod для того же.

Также отличается реализация от браузера к браузеру?

Ответы [ 3 ]

4 голосов
/ 10 июля 2011

Взгляните на реализацию WebKit: https://gist.github.com/964673. По-видимому, она использует сортировку min min / sort. От: http://svn.webkit.org/repository/webkit/trunk/Source/JavaScriptCore/runtime/ArrayPrototype.cpp

SpiderMonkey, похоже, действительно использует MergeSort. Смотри: http://hg.mozilla.org/mozilla-central/file/28be8df0deb7/js/src/jsarray.cpp.

1 голос
/ 10 июля 2011

Также отличается реализация из браузера в браузер?

Да, стандарт ECMAScript не определяет, какой алгоритм следует использовать. AFAIK Mozillas SpiderMonkey использует сортировку слиянием, а WebKit использует сортировку выбора. Что IE использует, вы, вероятно, должны спросить кого-то в Microsoft, так как это закрытый источник.

И я готов поспорить, что вам не удастся придумать лучший / более быстрый алгоритм, чем тот, который реализован в движке JavaScript браузеров.

0 голосов
/ 06 марта 2013

К сожалению, не существует стандартизированного метода.

Пока не наступит это время, вы можете написать собственную простую функцию алфавитизации:

sortObject = function (){
    var arr = [], i;
    for(i in this){
        arr.push({index:i,content:this[i]});
        delete this[i];
    }
    arr.sort();
    for(i in arr){
        var item = arr[i];
        this[item.index] = item.content;
    }
    return this; // make chainable
}
var obj = {
    acronym: "OOP",
    definition: "Object-Oriented Programming",
    article: "http://wikipedia.org/OOP"
};
sortObject.apply(obj); // indices are "acronym", "article", "definition"

Я знаюэтот вопрос был задан более года назад, но я надеюсь, что это поможет вам так же, как и всем с такой же проблемой.

...