オブジェクトが保持するキーは、 を使用して配列として取得できますObject.keys(<var>)
。配列内のキーの順序は任意です。インデックスを作成する前に並べ替える必要があります。オプションはsort()
配列の組み込みメソッドで、カスタム比較関数を提供できるので特に便利です (以下を参照)。デフォルトの順序はアルファベット順です。
順序付けられた配列を取得したら、アイテムが配列内のどこにあるかを調べて、そこから次の要素と前の要素を返すだけです。
var keys = Object.keys(items).sort();
var loc = keys.indexOf(item);
次の場合loc > -1
(つまり、アイテムが存在する場合):
- 前の項目:
items[keys[loc-1]]
ですが、確認してくださいloc > 0
(最初のものではありません)。
- 次の項目:
items[keys[loc+1]]
ですが、確認してくださいloc < keys.length
(最後の項目ではありません)。
Object.keys
Javascript 1.85+ と互換性があります。これは、古いブラウザの回避策です。
代替注文
数値
キーに番号順を持たせたい場合は、次の比較関数を使用します。
var keys = Object.keys(items).sort( function(a,b) {
return b - a;
});
作成 (または変更) 時間
英数字ではなく作成順序で作業する場合は、アイテムが作成時間を保持する必要があります。何かのようなもの:
<value>.index = Date.getTime();
items['<item>'] = <value>;
次に、sort()
メソッドには次の比較関数が必要です。
var keys = Object.keys(items).sort( function(a,b) {
return b.index - a.index;
});
これは、最終変更順序などに簡単に拡張できます。
作成順序
前者のソリューションは、アイテムが 1 ミリ秒以上離れて作成されている場合にのみ機能することに注意してください。これは、ユーザー アクションに適しています。アイテムがより速く追加される場合は、タイムスタンプの代わりにこれを使用します。
<value>.index = Object.keys(items).length;
または、代わりに、オブジェクト内のアイテムの数を外部カウンターに保持します。