以下は最初に0を記録し、次に1を記録します。オブジェクトへの参照ではなく、オブジェクトのコピーを保存するにはどうすればよいですか?
debug.log(vi.details.segment);
vi.nextSegment = vi.details;
vi.nextSegment.segment++;
debug.log(vi.details.segment);
JQueryでオブジェクトを複製するには:
var vi.nextSegment = jQuery.extend({}, vi.details);
注:上記は浅いコピーです:ネストされたオブジェクトまたは配列は参照によってコピーされます-vi.nextSegment.obj[prop]
に加えた変更はすべてvi.details.obj[prop]
に反映されます。 元のものと完全に分離の完全に新しいオブジェクトが必要な場合は、ディープコピーを行う必要があります(最初のパラメーターとしてtrue
を渡します)。
var vi.nextSegment = jQuery.extend(true, {}, vi.details);
拡張の詳細については、 こちら をご覧ください。
投稿を見てください: javascriptオブジェクトを複製する最も効率的な方法は何ですか
John Resig's answer:
// Shallow copy
var newObject = jQuery.extend({}, oldObject);
// Deep copy
var newObject = jQuery.extend(true, {}, oldObject);
詳細については、 jQueryのドキュメント をご覧ください。
これは、jQueryの「parseJSON()」および「JSON.stringify()」を使用してオブジェクトのクローンを作成するのに役立ちました。
$.ajax({
url: 'ajax/test.html',
dataType: 'json',
success: function(data) {
var objY = $.parseJSON(JSON.stringify(data));
var objX = $.parseJSON(JSON.stringify(data));
}
});
ObjXとobjYのデータオブジェクトのクローン作成は2つの異なるオブジェクトであり、「参照による」問題を台無しにする必要はありません。
グラシアス!
オブジェクトを複製する別の方法は
newObj = JSON.parse(JSON.stringify(oldObj));
ただし、日付が含まれている場合は注意してください。その場合、JSON.parseはdateではなくdate.toString()を返します。
これは私が要素を数回コピーする方法です:
最初にテンプレートがあります:
<div class="forms-container">
<div class="form-template">
First Name <input>
.. a lot of other data ...
Last Name <input>
<div>
<button onclick="add_another();">Add another!</button>
<div>
さて、JavaScript:
function add_another(){
jQuery(".form-template").clone().appendTo(".forms-container");
}
Immutable.js
_を試してください:jQuery
は主に_DOM Elements
_を扱うので、そうでないかもしれないが仕事に適したツールになります。 _Immutable.js
_は、Facebook
によって作成された56 kb (minified)
ライブラリです。
_// roughly implementing
import Immutable from 'immutable'
//
const oldObj = { foo: 'bar', bar: 'baz' }
// create a map from the oldObj and then convert it to JS Object
const newObj = Immutable.Map(oldObj).toJS()
_
このようにすると、newObj
からoldObj
を効果的に複製できます。基本的に、Map
がまだない場合は、最初にMap
を作成する必要があります。マップは、copies
を作成するために使用する_blue-print
_のようなものです。
ホーム-不変
ドキュメント-Immutable Docs
GitHub-Immutable @ GitHub
幸運を。