2016-10-26 10 views
0

私は、JavaScriptのオブジェクトを持っている:文字列を与えられたネストされたオブジェクトから要素を削除する方法は?

var obj = $scope.items[0]; //$scope.items is a plain object 
console.log(typeof obj)  //object 

さて、この後、私はいくつかの再帰を行うと、に追加する(プロパティのチェーン)のパスを取得文字列としてエンコードされ、このようになりますされ、「objの:

str = ".child.splice(" + item_index + ",1)"; //item_index is an integer 

これをオブジェクトに適用します。私はそれをこの方法を試してみました:

var objToDelete = obj += str 
console.log(typeof objToDelete) //string 

私は無地のオブジェクト内の要素を削除しようとしている、と私をハードコード、それならば、それは動作します。この方法:

delete $scope.items[0].child.splice(1,1); 

を私が実際にしたいです

delete objToDelete; // *doesn't work* 

ただし、 'objToDelete'の型は文字列であるため、これは失敗します。

オブジェクトとして「objToDelete」を保持してこれを動作させるにはどうすればよいですか?

+0

* "おいしい人たち" * ...なぜあなたは私たちの間で女性を除外しますか?イモを下降させる十分な理由。 – trincot

+0

実際に部分的なJavaScriptコードである文字列を収集することは良い考えではありません。そうすれば 'eval'に戻る必要があります。たぶん、あなたはこの文字列を生成するコードを共有することができます。おそらくそのコードの一部を見直さなければならないでしょう。 – trincot

+0

@trincot何故downvoteの理由!感謝します。質問にもっと集中して欲しいです。とにかく、生成される文字列に問題はありません。これを ".child.splice(1,1)"とします。他のアプローチは考えられませんでした。また、複雑な入れ子になったJSONも扱っています。 – sharathChandra

答えて

0

最終目標は何ですか?この作品のようなものはありますか?ちょうどあなたがあなたを使用することが少し楽にしたい場合は機能でそれを包むことができITEM_INDEXに

delete $scope.items[0].child.splice(item_index,1); 

を変更:

function deleteThing(thingToDelete){ 
    delete $scope.items[0].child.splice(thingToDelete,1); 
} 

してからちょうど行いますへ

deleteThing(2); 

インデックスが2のアイテムを削除してください。

+0

これは本当の質問に対する答えではありません。 – trincot

+0

この問題は、インデックスに付随するものではなく、追加する必要があるjsonで削除するパスか、それほど適切ではないように、追加するよりも優れたアプローチです。 – sharathChandra

+0

この答えのコンセプトは、オブジェクトをトラバースするために、とにかくあなたが言っている再帰でうまくいきます。文字列でevalを使用したくない場合は、問題が発生する可能性があります。オブジェクトのプロパティを反復するためのObject.keysなどのオプションがあります。 – ste2425

関連する問題