9

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

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

不同浏览器的实现也不同吗?

4

3 回答 3

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 。

于 2011-07-10T09:57:05.767 回答
1

不同浏览器的实现也不同吗?

是的,ECMAScript 标准没有指定应该使用什么算法。AFAIK Mozillas SpiderMonkey 使用归并排序,WebKit 使用选择排序。IE 使用什么你可能要问微软的人,因为它是闭源的。

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

于 2011-07-10T10:00:20.767 回答
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"

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

于 2013-03-05T23:05:38.723 回答