Javascript本机排序方法代码

时间:2011-07-10 09:43:00

标签: javascript native-methods

任何想法我如何能够专门查看本机javascript方法的实现 方法。我正在寻找这个的原因我只是想知道算法使用的是什么,以及它的复杂性是什么。

我在javascript中对一个巨大的json对象进行排序,我想知道是否应该为自己编写自己的mety hod。

从浏览器到浏览器的实现也有所不同吗?

3 个答案:

答案 0 :(得分:4)

看看WebKit实现:https://gist.github.com/964673。显然,它使用最小排序/选择排序。来自: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 :(得分:1)

  

实施也不同   从浏览器到浏览器?

是的,ECMAScript标准没有规定应该使用哪种算法。 AFAIK Mozillas SpiderMonkey使用mergesort,WebKit使用选择排序。 IE使用你可能不得不向微软的某个人询问,因为它是封闭的来源。

而且我愿意打赌几块钱你不能提出比浏览器JavaScript引擎更好/更快的算法。

答案 2 :(得分:0)

不幸的是,似乎没有标准化的方法。

在此之前,你可以编写自己的简单字母化功能:

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"

我知道这个问题是在一年前被问到的,但我希望这对任何有同样问题的人都有帮助。