2012-03-26 9 views
9

オブジェクトを複製して特定のプロパティを残す効率的な方法はありますか?理想的には$ .extend関数を書き直すことなく?

var object = { 
    "foo": "bar" 
    , "bim": Array [1000] 
}; 

// extend the object except for the bim property 
var clone = $.extend({}, object, "bim"); 
// = { "foo":"bar" } 

私の目標は、私が使用しないものをコピーしないことでリソースを節約することです。

+1

これらのプロパティの設定を解除するのはどうですか? –

+0

私はそれを行うことができます、それは私が時間とリソースをコピーするリソースを無駄にしたくないと思うだけです。たとえば、あるプロパティの値が大きな配列だった場合、私はそれをまったくコピーしたくないと思います。 – stinkycheeseman

答えて

9

jQuery.extendは引数が無限であるため、機能を無効にすることなく、要求されたフォーマットに合わせて書き換えることはできません。

あなたは、しかし、簡単にdelete演算子を使用して、拡張後にプロパティを削除することができます:あなたはpickまたはunderscoreからomitのいずれかで欲しいものをアーカイブすることができます

var object = { 
    "foo": "bar" 
    , "bim": "baz" 
}; 

// extend the object except for the bim property 
var clone = $.extend({}, object); 
delete clone.bim; 
// = { "foo":"bar" } 
+0

ああ、そういうわけで、ある財産を抑圧する方法はないのですか?私は使っていないものをコピーするにはあまりにも多くの時間とリソースを費やさないようにしています。 – stinkycheeseman

+2

@stinkycheeseman新しい実装を作成しないでください。 http://james.padolsey.com/jquery/#v=git&fn=jQuery.extend –

+0

ハッシュに "jQuery.extend"の注釈付きソースコードが含まれているため、私はあまりにも "親"のようなキーを避けたいと思っていたので、深いコピーを実行している間に、私はあまりにも親のようなキーを避けたいと思っていた。 –

0

、彼らは両方のコピーを作成することができますオブジェクトをコピーして、コピー/クローンに含めるか除外するソースオブジェクトの特定のキーをフィルタします。

var object = { 
    "foo": "bar" 
    , "bim": Array [1000] 
}; 

// copy the object and omit the desired properties out 
// _.omit(sorceObject, *keys) where *keys = key names separated by coma or an array of keys 
var clone = _.omit(object, 'bim'); 
// { "foo":"bar" } 
関連する問題