オブジェクトのプロパティの順序に関する保証はありません。サンプル オブジェクトをコンソールに貼り付けると、次のように表示されます。
> obj = {"1234" : "xx", "4321" : "yy", "5555" : "hh", "2321" : "aa" }
Object {1234: "xx", 2321: "aa", 4321: "yy", 5555: "hh"}
ご覧のとおり、chrome はプロパティを配列のように昇順で並べています。わかりませんが、IE はこれを行わない可能性があります...おそらく、いくつかのあいまいなブラウザーはプロパティを降順で並べます...実際のオブジェクトがどのように見えるかを知る方法はないので、おそらく再考してください.
すべてのプロパティが本質的に数値である場合、配列を使用しても問題はありません.JSでは、Array
プロトタイプは拡張されたものにすぎませんObject
:
obj = [];
obj[1234] = 'xx';
obj[2321] = 'aa';
obj[5555] = 'hh';
いずれにせよ、数値インデックスは内部的に文字列に強制されるため (配列はオブジェクトであるため)、JS は無限の空のインデックスを作成しません。解決するobj[200]
のと同じように解決しobjectLiteral.undefinedProperty
ます。要求されたプロパティが見つからない場合は、undefined を返します。
それらはあなたが進むにつれて追加されますが、ここでは2つの方法があります:
//Assume simpel object (non-nested)
var newObj = JSON.parse(JSON.stringify(obj).replace(/\{|,\s*"5{4}"\s*:.+$/,'}'));
これは、最も簡単な方法だと思いますが、あまり信頼できません。最も「試行錯誤された」アプローチは次のとおりです。
var unset = false;
for (var prop in obj)
{
if (obj.hasOwnProperty(prop))
{
unset = unset || !!(prop === '5555');
if (unset === true)
{
delete(obj[prop]);
}
}
}
最後のアプローチでは、すべてのキーを含む配列を作成します。これを反復処理し、その方法でプロパティを削除します。完全を期すためにここに記載しています。ただし、ES5 仕様をサポートするブラウザーが必要なため (悲しいことに、すべてのブラウザーがサポートしているわけではありません)、使用しません。上記のコードに勝る利点はありません。
var keys = Object.keys(obj).sort(),//call sort to assure ascending order
toDelete = keys.splice(keys.indexOf('5555'), keys.length).sort();
for(var i=0;i<toDelete.length;i++)
{
delete obj[toDelete[i]];
}