2016-09-05 1 views
2

私はデータベースにオブジェクトの値を挿入した後JSオブジェクトを空にするには?

var person = {'id':null, 'name':'John Doe'} 

のような物を持って、私は、サーバーから別のオブジェクトを取得します:私はpersonの更新された値を使用するようにangular.mergeを使用している

var personInDB = {'id':1234, 'name':'John Doe'} 

personInDBのものである。

しかし、angular.mergeを適用する前にpersonオブジェクトを空にして、データベース内の値のみを取得します。私は、新しい空のオブジェクトを人に割り当てることは望ましくありません。というのも、それはデータバインディングを壊してしまうからです。私は今、手動で各フィールドを更新バインディングangularjsのデータを壊さないようにする

+0

なぜ '$ resource'を使用しないのですか? –

答えて

3

私はpersonオブジェクトを空にしたい...私はperson

に新しい空のオブジェクトを割り当てたくない私は、組み込みのオブジェクト.deleteAllProperties()方法のいずれかの種類を認識していませんよので、プロパティをループし、それぞれ個別にdeleteを呼び出します。

Object.keys(person).forEach(k => delete person[k]) 

またはIE9などのバック限りのサポートのために少し長め非ES6矢印の機能バージョン::以下は、それを行うために合理的に整頓の方法であるだけで使用

Object.keys(person).forEach(function(k) { delete person[k]}) 

さらに古いIEの場合for..inループ(.hasOwnProperty()チェック付き)。

そして、明らかにあなたは、再利用を容易にするための機能の中に上記のいずれかを置くことができます。

function emptyObject(obj) { 
    Object.keys(obj).forEach(k => delete obj[k]) 
} 

emptyObject(person) 

注意これは、あなたが求めてきましたどのような答えがあなたを考える理由、私はよく分からないことまったくそれをする必要があります。質問に表示されている例には前後の同じ2つのプロパティがありますので、angular.merge()はオブジェクトを最初に空にする必要なしに古い値を新しい値で上書きします。 (あなたのオブジェクトの古いバージョンが新しいバージョンにもはや存在しないプロパティを持つかもしれないケース(示されていない)を許可しようとしていますか?その後、あなたは人オブジェクトのすべての属性を空にしたい場合は「ID」のみ

person['id']=null; 

を空にしたい場合)

+0

私のオブジェクトをDBのオブジェクトと同期させたいので、DBコードに問題があり、 'name'を挿入しない場合は、ローカルオブジェクトの' name'プロパティを削除する必要があります。 – Barun

+0

さて、私が示したコードは、あなたが求めた空にする必要があり、私は古いブラウザをカバーするために私の答えを更新しました。 – nnnnnn

0

まあ、:

var person = {id : null, name: 'toto'}; 

// Ajax call 
person.id = ajaxres.id; 
person.name = ajaxres.name 
1

私が正しく理解していれば、あなたは新しいものにマージするか、前に元のオブジェクトを空にする必要があると考えているようですデータベースのプロパティは使用されません。私はそれが事実だとは思わない。 angular.mergesourceを見て、ソースオブジェクトからデスティネーションオブジェクトにすべてのプロパティをコピー(つまり、上書き)するように見えます。だから、それをすべて空にする必要はありません。ちょうどマージとデータベースオブジェクトのすべての値が使用されます。

2

Object.keys(person).forEach(key => person[key]=null); 
0

あなたがECAM6を使用している場合は、することができます使用Destructuring_assignment

[person] = [personInDB ] //Object {id: 1234, name: "John Doe"} 

OR

このようにすることができます。

var arrKeys = Object.keys(person); 

    arrKeys.forEach(function(val,key){ 

     person[val] = personInDB[val]; 

    }) 
+0

あなたの '[person] = [personInDB]'コードを試しても 'person = personInDB'と同じ結果が出ましたが、' person' *が*参照した既存のオブジェクトは更新されませんでした訊いている)。 – nnnnnn

+0

@nnnnnnあなたはそれをどのようにテストしたか教えていただけますか?いくつかの追加の –

+0

https://jsfiddle.net/x457wb4x/があります。あなたがリンクしているMDNページには、 '[a、b] = [c、 d] '... – nnnnnn

関連する問題