2016-08-06 4 views
0

私はarray2をarray1からextendして "値"を取得する2つの配列を持っています。jQueryはオブジェクトを上書きして複製を作成します

しかし、extendによって別のオブジェクトも上書きされ、複製が作成されます。あなたは結果に二つの "AggregationLevel" オブジェクトを見ることができます

enter link description here

var array1 = [{ 
 
attributeId: 2, 
 
attributeName: "ToolOutput", 
 
values: [ 
 
    "tool output value" 
 
] 
 
    }, { 
 
attributeId: 4, 
 
attributeName: "AggregationLevel", 
 
values: [ 
 
    "aggregation level value" 
 
] 
 
    }]; 
 

 
    var array2 = [{ 
 
attributeId: 1, 
 
attributeName: "DataToolsUsage", 
 
values: [] 
 
    }, { 
 
attributeId: 2, 
 
attributeName: "ToolOutput", 
 
values: [] 
 
    }, { 
 
attributeId: 3, 
 
attributeName: "ConnectedTo", 
 
values: [] 
 
    }, { 
 
attributeId: 4, 
 
attributeName: "AggregationLevel", 
 
values: [] 
 
    }]; 
 

 
    var newArray = $.extend({},array2, array1); 
 

 
var printed = "result[0] is : <br> " + JSON.stringify(newArray[0]); 
 
printed = printed + "<br><br> result[1] is : <br> " + JSON.stringify(newArray[1]) 
 
printed = printed + "<br><br> result[2] is : <br> " + JSON.stringify(newArray[2]) 
 
printed = printed + "<br><br> result[3] is : <br> " + JSON.stringify(newArray[3]) 
 
    
 
document.write(printed);

。また、 "DataToolsUsage"の削除

ご存じですか?

+0

https://plnkr.co/edit/uF6dEuGZ2Y8ADakjdKjs –

答えて

0

このようにextendを呼び出す必要があります。$.extend({}, array1, array2)最初の空のオブジェクトは、array1とarray2を拡張した結果を格納するターゲットオブジェクトです。ターゲット引数を指定しないと、array1はターゲットオブジェクトとみなされ、値は上書きされます。拡張の詳細については、https://api.jquery.com/jquery.extend/を参照してください。

+0

同じ結果、あなたはplunkrを確認することができ https://plnkr.co/edit/uF6dEuGZ2Y8ADakjdKjs –

0

$.extendは、このようなタスクには適していません。いくつかのオブジェクトの2つの配列があり、いくつかのカスタム識別子フィールドを持っています。したがって、配列をマージしたい場合は、すべての項目を反復し、結果配列を手動で設定する必要があります。 underscoreのようなライブラリを使うと、より簡単にリットラーを行うことができますが、それはまったく必要ありません。

関連する問題