ネイティブ javascript メソッド、特に sort メソッドの実装をどのように表示できるかについてのアイデア。私がこれを探している理由は、使用されているアルゴリズムとその複雑さは何なのか疑問に思っているだけです。
javascript で巨大な json オブジェクトをソートしていますが、同じメソッドを独自に作成する必要があるかどうか疑問に思っていました。
また、ブラウザごとに実装が異なりますか?
ネイティブ javascript メソッド、特に sort メソッドの実装をどのように表示できるかについてのアイデア。私がこれを探している理由は、使用されているアルゴリズムとその複雑さは何なのか疑問に思っているだけです。
javascript で巨大な json オブジェクトをソートしていますが、同じメソッドを独自に作成する必要があるかどうか疑問に思っていました。
また、ブラウザごとに実装が異なりますか?
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を参照してください。
また、ブラウザごとに実装が異なりますか?
はい、ECMAScript 標準では、使用するアルゴリズムを指定していません。私の知る限り、Mozillas SpiderMonkey はマージソートを使用し、WebKit は選択ソートを使用します。IE が使用するものは、クローズド ソースであるため、おそらく Microsoft の誰かに尋ねる必要があります。
そして、ブラウザーの JavaScript エンジンに実装されているアルゴリズムよりも優れた/高速なアルゴリズムを思いつくことができないことに、2、3 ドルを賭けても構わないと思っています。
残念ながら、標準化された方法はないようです。
その時が来るまでは、独自の単純なアルファベット順関数を作成できます。
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"
この質問が 1 年以上前に出されたことは承知していますが、これがあなたと同じ問題を抱えている人の助けになることを願っています。