質問、 私はObject
はそれでいくつかの要素が含まれている必要がありオブジェクト削除ここでは要素の挙動
例:
obj = {
"0": { "a": "a1", "b": "b1"},
"1": { "a": "a2", "b": "b2"}
};
そして今、私は、element 0
を削除/削除、それはそうしたいですelement 1
が残っていますが、Object
から要素を削除すると予想される結果の代わりに、Array
のように動作します。第2要素は、上記の例の最初の要素を置き換えます。1
は0
後続のすべての要素と同様に。
注:これは、オブジェクト内に2つ以上の要素が含まれており、必要ではないかもしれ最初の要素を削除しますが、それはここではオブジェクト内の任意の要素
私がこれまで行って解決することができ、
var index = 0 //just for demo purpose
var tempArr = Object.keys(obj).map(function(key){
return obj[key];
});
tempArr.splice(index,1);
obj = tempArr.reduce(function(acc, cur, i){
acc[i] = cur;
return acc;
}, {});
結果:
obj = {
"0": { "a": "a2", "b": "b2"}
}
このソリューションの作品私が望む結果を与えましたが、これを行う方が良いですか?
編集:提案や議論の結論
私の解決策として、ほぼ同じ結果を与える問題を、解決するための別の方法として。
t.niese @による@アレクサンドル-はIonutミハイ
obj.length = Math.max.apply(null, Object.keys(obj))+1;
Array.prototype.splice.call(obj, index, 1);
delete obj.length; // optionally delete the length again
によって@Anthonyマクグラス
delete obj[index];
obj = Object.keys(obj).reduce(function(newobj,key,i){
newobj[i]=obj[key];
return newobj;
},{});
によって
function Delete(index) {
delete obj[index];
var keys = Object.keys(obj);
var update = false;
for (var i = index + 1; i <= keys.length; i++) {
obj[i - 1] = obj[i];
update = true;
}
if (update) delete obj[keys[keys.length - 1]];
}
再び役立ちますおくります。
の可能性のある重複:要素がある場合はどうなります[javascriptオブジェクトの名前の変更キー](https://stackoverflow.com/questions/4647817/javascript-object-rename-key) –
途中で削除されましたか? – qxg
@TavishAggarwalはい。オブジェクトが2つの要素しか持たない場合は、それは答えになります。オブジェクトが多くの要素を持つ場合、それはループ内の問題を使用することができます。これは回避しようとしています。 – Dean