admin管理员组

文章数量:1297116

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 plexity 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?

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 plexity 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?

Share Improve this question asked Jul 10, 2011 at 9:43 Baz1ngaBaz1nga 15.6k3 gold badges37 silver badges63 bronze badges 3
  • 1 Whatever you're doing, I can guarantee you that you won't beat hand-optimized C or C++ code in JS for the general case. Just use the existing option, it will work well enough. And if it doesn't, the bottleneck is most likely not sort but some of your algorithms. – user395760 Commented Jul 10, 2011 at 9:49
  • No there is no other bottleneck..The performance is good enough but as the no of entities increase the no of parisons increase. Was wondering what goes on inside that method. – Baz1nga Commented Jul 10, 2011 at 9:54
  • 1 Of course the number of parisions increase, even the best (plexity-wise) sort algorithms are O(n * log n) ;) – user395760 Commented Jul 10, 2011 at 10:00
Add a ment  | 

3 Answers 3

Reset to default 4

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

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

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 e up with a better/faster algorithm than the one implemented into the JavaScript engine of the browsers.

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

Until that time es, 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/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.

本文标签: Javascript native sort method codeStack Overflow