あなたの問題は、JavaScriptでの配列は0ベース、1ベースではないということです。ソート後、最初の要素はa[0]
で、2番目の要素はa[1]
です。ソート後にはa[2]
はありません。
ブラウザで開発者ツールを開くと、これが表示されます。—最新のブラウザーにはすべてのブラウザがあります。あなたがそれを見つけるのを助ける必要があるならGoogleはソートの後に—とコードconsole.log(a)
を追加する。 alert
を使用すると、コードをデバッグするのに最も苦労し、効率の悪い可能性があります。 http://jsfiddle.net/TJLtS/2/
また、今後の参考のために、あなたは、より簡単に、あなたのオブジェクトリテラルを宣言することを望むかもしれない:
はここで働いて、あなたのスクリプトの更新版です
var a = [
{id:'1', aaa:'xxx'}, // This is a[0]
{id:'2', bbb:'yyy'} // This is a[1]
];
あなたが見ることができるように、正当な識別子であるキーは、オブジェクトリテラルで引用符で囲む必要はありません。
編集ここでは、ニーズに応じて、あなたが興味を持つであろう2つの選択肢が、以下のとおりです。
は、すべてのオブジェクトを保持
var objects = [
{id:"a1", name:"Jim"},
{id:"a2", name:"Zed"},
{id:"a3", name:"Bob"},
];
objects.sort(function(o1,o2){
var n1 = o1.name, n2 = o2.name;
return n1<n2 ? -1 : n1>n2 ? 1 : 0;
});
for (var i=0,len=objects.length; i<len; ++i){
console.log(objects[i].id);
}
// Result:
// a3, a1, a2
ソートされた配列内のすべてのオブジェクトを保管してくださいハッシュで、別途注文
var objects = {
a1: {id:"a1", name:"Jim"},
a2: {id:"a2", name:"Zed"},
a3: {id:"a3", name:"Bob"},
};
// Easily look up an object by id (can't do this as easily or fast with array)
var id = "a2";
console.log(objects[id]); // {id:"a2", name:"Zed"}
// Create an array just the ids
var ids = Object.keys(objects);
// Sort the array of ids based on properties of the objects the represent
ids.sort(function(id1,id2){
var n1 = objects[id1].name, n2=objects[id2].name;
return n1<n2 ? -1 : n1>n2 ? 1 : 0;
});
// Iterate the sorted array and use each key to find the object
for (var i=0,len=ids.length; i<len; ++i){
console.log(objects[ids[i]].name);
}
// Result:
// Bob, Jim, Zed
注:JavaScriptでは、 'a [" 1 "]'は 'a [1]'と同じです。引用符を使用する理由はありません。 – Phrogz