Javascript native sort method code

2019-01-15 20:56发布

Any idea how I can view the implementation of native javascript methods specifically the sort method. The reason why I am looking for this I am just wondering what the algorithm used is and what is the complexity of the same.

I am sorting a huge json object in javascript and I was wondering if I should write my own mety hod for the same.

Also does the implementation differ from browser to browser?

3条回答
在下西门庆
2楼-- · 2019-01-15 21:04

Unfortunately, there doesn't appear to be a standardized method.

Until that time comes, you could write your own simple alphabetization function:

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"

I know this question was asked over a year ago, but I hope this helps you as well as anyone with the same problem.

查看更多
萌系小妹纸
3楼-- · 2019-01-15 21:06

Also does the implementation differ from browser to browser?

Yes, the ECMAScript standard does not specify what algorithm should be used. AFAIK Mozillas SpiderMonkey uses mergesort and WebKit uses selection sort. What IE uses you probably have to ask someone at Microsoft, since it's closed source.

And I'm willing to bet a couple of bucks that you cannot come up with a better/faster algorithm than the one implemented into the JavaScript engine of the browsers.

查看更多
\"骚年 ilove
4楼-- · 2019-01-15 21:23

Take a look at the WebKit implementation: https://gist.github.com/964673. Apparently, it uses min sort/selection sort. From: http://svn.webkit.org/repository/webkit/trunk/Source/JavaScriptCore/runtime/ArrayPrototype.cpp

SpiderMonkey seems to indeed use MergeSort. See: http://hg.mozilla.org/mozilla-central/file/28be8df0deb7/js/src/jsarray.cpp.

查看更多
登录 后发表回答