任何想法我如何能够专门查看本机javascript方法的实现 方法。我正在寻找这个的原因我只是想知道算法使用的是什么,以及它的复杂性是什么。
我在javascript中对一个巨大的json对象进行排序,我想知道是否应该为自己编写自己的mety hod。
从浏览器到浏览器的实现也有所不同吗?
答案 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"
我知道这个问题是在一年前被问到的,但我希望这对任何有同样问题的人都有帮助。