Ano ang pinaka mahusay na paraan upang malalim na i-clone ang isang bagay sa javascript?

Ano ang pinaka mahusay na paraan upang i-clone ang JavaScript object? Nakita ko ang obj = eval(uneval(o)); ngunit kung saan ay hindi karaniwan at sinusuportahan lamang ng Firefox .

Nagawa ko na ang mga bagay tulad ng obj = JSON.parse(JSON.stringify(o)); , ngunit pagdudahan ang bisa.

Nakita ko rin ang mga function ng recursive copy na may iba't ibang mga kaku>
Nagulat ako na wa>

4845
23 сент. itinakda ng jschrab sa 23 sep . 2008-09-23 19:26 '08 at 7:26 pm 2008-09-23 19:26
@ 69 sagot
  • 1
  • 2
  • 3

Tandaan: Ito ang sagot sa isa pang sagot, hindi ang tamang sagot sa tanong na ito. Kung nais mong mabilis na i-clone ang mga bagay, mangyaring sundin ang payo ni Corban sa iyong sagot sa tanong na ito.


Gusto kong tandaan na ang .clone() paraan sa jQuery ay lamang ang mga clone elemento ng DOM. Upang i-clone ang mga JavaScript object, dapat kang:

 // Shallow copy var newObject = jQuery.extend({}, oldObject); // Deep copy var newObject = jQuery.extend(true, {}, oldObject); 

Higit pang impormasyon ay matatagpuan sa dokumentong jQuery .

Gusto ko ring ituro na ang isang malalim na kopya ay talagang mas matalinong kaysa sa ipinapakita sa itaas - maaari itong maiwasan ang maraming mga traps (halimbawa, upang lubos na mapalawak ang elemento ng DOM). Ito ay madalas na ginagamit sa jQuery core at sa mga plugin na may mahusay na epekto.

4203
23 сент. Sumagot na ibinigay ni John Resig Sep 23 2008-09-23 21:09 '08 at 9:09 pm 2008-09-23 21:09

Tingnan ang benchmark na ito: http://jsben.ch/#/bWfk9

Sa aking mga nakaraang pagsubok, kung saan ang bilis ay ang pangunahing problema, natuklasan ko

<Prev> <code> JSON.parse (JSON.stringify (OBJ)) Code>

upang maging pinakamabilis na paraan upang malalim na i-clone ang isang bagay (lumalampas ito sa jQuery.extend na may malalim na bandila na itinakda ng 10-20%).

Ang jQuery.extend ay medyo mabilis kapag ang malalim na halaga ng bandila ay naka-set sa false (mababaw na clone). Ito ay isang mahusay na pagpipilian, dahil kasama dito ang karagdagang lohika para sa pag-check ng uri at hindi kumopya sa mga katangian ng hindi natukoy, atbp Ngunit ito ay pabagalin ka rin ng kaunti.

Kung alam mo ang istraktura ng mga bagay na sinusubukan mong i-clone o maaari mong maiwasan ang malalim na nested arrays, maaari kang magsulat ng isang simpleng for (var я in obj) loop for (var я in obj) upang i-clone ang iyong object, checking hasOwnProperty at ito ay magiging mas mabilis kaysa sa jQuery.

border=0

Sa wakas, kung sinusubukan mong i-clone ang isang kila>

Ang mekanismo ng pagsubaybay ng JavaScript ay sinisipsip sa pag-optimize para sa for..in loop at checking naOwnProperty ay magpapabagal din sa iyo. Manu-manong clone kapag ang bilis ay isang ganap na pangangai>

  var clonedObject = { knownProp: obj.knownProp,.. } Код> 

Mag-ingat sa paggamit ng paraan ng JSON.parse(JSON.stringify(obj)) para sa Mga bagay sa Date - JSON.stringify(новая дата()) nagbabalik ng isang string na representasyon ng petsa sa format ng ISO, kung saan ang JSON.parse() ay hindi bumalik sa Date bagay. Tingnan ang sagot na ito para sa higit pang mga detalye .

Bi>JSPerf na ito , ang paggawa ng iyong sariling cloning sa pamamagitan ng paglikha ng isang bagong function ay halos 800x mas mabagal kaysa sa paggamit ng JSON.stringify, na kung saan pass incredibly mabilis sa buong board.

2046
17 марта '11 в 22:19 2011-03-17 22:19 ang sagot ay ibinigay ng Corban Brook noong Marso 17 '11 sa 10:19 ng 2011-03-17 22:19

Sa pag-aakala na mayroon ka lamang na mga variable, at hindi anumang mga pag-andar sa iyong bagay, maaari mo lamang gamitin:

 var newObject = JSON.parse(JSON.stringify(oldObject)); 
431
04 янв. Ang sagot ay ibinigay ni Sultan Shakir Jan 04 2011-01-04 11:05 '11 sa 11:05 2011-01-04 11:05

Nakaba>

Kasama sa pamantayan ng HTML ang isang panloob na nakaba> na maaaring lumikha ng malalim na mga panggagaya ng mga bagay. Ito ay limitado pa rin sa i>

Suporta sa Node.js: pang-eksperimentong 🙂

Ang v8 module sa Node.js kasalukuyang (bi>direktang nagbibigay ng isang nakaba> , ngunit ang pag-andar na ito ay minarkahan pa rin bi>

/ html # 793 sa GitHub .  Sa kasalukuyan ay iminungkahi na gamitin ito para sa karamihan ng mga layunin bi>
 class StructuredCloner { constructor() { this.pendingClones_ = new Map(); this.nextKey_ = 0; const channel = new MessageChannel(); this.inPort_ = channel.port1; this.outPort_ = channel.port2; this.outPort_.onmessage = ({data: {key, value}}) => { const resolve = this.pendingClones_.get(key); resolve(value); this.pendingClones_.delete(key); }; this.outPort_.start(); } cloneAsync(value) { return new Promise(resolve => { const key = this.nextKey_++; this.pendingClones_.set(key, resolve); this.inPort_.postMessage({key, value}); }); } } const structuredCloneAsync = window.structuredCloneAsync = StructuredCloner.prototype.cloneAsync.bind(new StructuredCloner); 

Halimbawa ng paggamit:

 const structuredClone = obj => { const oldState = history.state; history.replaceState(obj, null); const clonedObj = history.state; history.replaceState(oldState, null); return clonedObj; }; 

Halimbawa ng paggamit:

Notification lumilikha ng nakaba>
306
06 июня '12 в 17:59 2012-06-06 17:59 ang sagot ay ibinigay sa Jeremy Banks Hunyo 06 '12 sa 17:59 2012-06-06 17:59

Kung hindi ito binuo, maaari mong subukan ang:

 function clone(obj) { if (obj === null || typeof (obj) !== 'object' || 'isActiveClone' in obj) return obj; if (obj instanceof Date) var temp = new obj.constructor(); //or new Date(obj); else var temp = obj.constructor(); for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { obj['isActiveClone'] = null; temp[key] = clone(obj[key]); delete obj['isActiveClone']; } } return temp; } 
294
23 сент. Sumagot na ibinigay ni ConroyP 23 Set 2008-09-23 19:38 '08 at 7:38 pm 2008-09-23 19:38

Epektibong paraan upang i-clone (hindi malalim na pag-clone) isang bagay sa isang linya ng code

Ang paraan ng Object.assign ay bahagi ng pamantayan ng ECMAScript 2015 (ES6) at ginagawa nang eksakto kung ano ang kai>

 var clone = Object.assign({}, obj); 

Ang paraan ng Object.assign () ay ginagamit upang kopyahin ang mga halaga ng lahat ng mga tinukoy na tamang katangian mula sa isa o higit pang mga pinagmumulan ng bagay sa target na object.

Magbasa nang higit pa ...

polyfill upang suportahan ang mas lumang mga browser:

 if (!Object.assign) { Object.defineProperty(Object, 'assign', { enumerable: false, configurable: true, writable: true, value: function(target) { 'use strict'; if (target === undefined || target === null) { throw new TypeError('Cannot convert first argument to object'); } var to = Object(target); for (var i = 1; i < arguments.length; i++) { var nextSource = arguments[i]; if (nextSource === undefined || nextSource === null) { continue; } nextSource = Object(nextSource); var keysArray = Object.keys(nextSource); for (var nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex++) { var nextKey = keysArray[nextIndex]; var desc = Object.getOwnPropertyDescriptor(nextSource, nextKey); if (desc !== undefined  desc.enumerable) { to[nextKey] = nextSource[nextKey]; } } } return to; } }); } 
148
15 дек. Ang sagot ay ibinigay ni Eugene Tiurin noong Disyembre 15. 2015-12-15 10:26 '15 sa 10:26 AM 2015-12-15 10:26

code:

 // extends 'from' object with members from 'to'. If 'to' is null, a deep clone of 'from' is returned function extend(from, to) { if (from == null || typeof from != "object") return from; if (from.constructor != Object  from.constructor != Array) return from; if (from.constructor == Date || from.constructor == RegExp || from.constructor == Function || from.constructor == String || from.constructor == Number || from.constructor == Boolean) return new from.constructor(from); to = to || new from.constructor(); for (var name in from) { to[name] = typeof to[name] == "undefined" ? extend(from[name], null) : to[name]; } return to; } 

Pagsubok:

 var obj = { date: new Date(), func: function(q) { return 1 + q; }, num: 123, text: "asdasd", array: [1, "asd"], regex: new RegExp(/aaa/i), subobj: { num: 234, text: "asdsaD" } } var clone = extend(obj); 
94
25 июня '09 в 10:53 2009-06-25 10:53 ang sagot ay ibinigay sa pamamagitan ng Kamarey sa Hunyo 25, 2009 sa 10:53 2009-06-25 10:53

Ito ang ginagamit ko:

 function cloneObject(obj) { var clone = {}; for(var i in obj) { if(typeof(obj[i])=="object"  obj[i] != null) clone[i] = cloneObject(obj[i]); else clone[i] = obj[i]; } return clone; } 
86
12 дек. Ang sagot ay ibinigay kay Alan 12 Disyembre. 2009-12-12 01:47 '09 sa 1:47 2009-12-12 01:47

Malalim na kopya ng pagganap: mula sa pinakamahusay na sa pinakamasama

  • Reassignment "=" (string arrays, numeric arrays - lamang)
  • Slice (string arrays, array ng mga numero - lamang)
  • Concatenation (mga arrays lamang ng mga string, numeric arrays)
  • Custom na pag-andar: for-loop o recursive copy
  • jQuery $ .extend
  • JSON.parse (tanging string arrays, arrays ng mga numero, array ng mga bagay)
  • Underscore.js _.clone (tanging string arrays, numeric arrays)
  • Lo-Dash _.cloneDeep

Kopyahin nang malalim ang isang hanay ng mga string o mga numero (isang antas - wa>

Kapag ang isang array ay naglalaman ng mga numero at mga string - mga function tulad ng.slice () ,. Concat (),. Splice (), ang assignment operator "=", at ang clone function na Underscore.js; gumawa ng isang malalim na kopya ng mga elemento ng array.

Kung ang reassignment ay may pinakamataas na pagganap:

 var arr1 = ['a', 'b', 'c']; var arr2 = arr1; arr1 = ['a', 'b', 'c']; 

Ang I.slice () ay may mas mahusay na pagganap kaysa sa .concat (), http://jsperf.com/duplicate-array-slice-vs-concat/3

 var arr1 = ['a', 'b', 'c']; // Becomes arr1 = ['a', 'b', 'c'] var arr2a = arr1.slice(0); // Becomes arr2a = ['a', 'b', 'c'] - deep copy var arr2b = arr1.concat(); // Becomes arr2b = ['a', 'b', 'c'] - deep copy 

Kopyahin ang malalim na hanay ng mga bagay (dalawa o higit pang mga antas - mga payo):

 var arr1 = [{object:'a'}, {object:'b'}]; 

Sumulat ng custom na function (may mas mahusay na pagganap kaysa sa $ .extend () o JSON.parse):

 function copy(o) { var out, v, key; out = Array.isArray(o) ? [] : {}; for (key in o) { v = o[key]; out[key] = (typeof v === "object"  v !== null) ? copy(v) : v; } return out; } copy(arr1); 

Gumamit ng mga function ng third-party na utility:

 $.extend(true, [], arr1); // Jquery Extend JSON.parse(arr1); _.cloneDeep(arr1); // Lo-dash 

Kung saan ang jQuery $ .extend ay may mas mahusay na pagganap:

71
18 сент. Ang sagot ay ibinigay tfmontague 18 sep . 2014-09-18 23:10 '14 sa 23:10 2014-09-18 23:10
 var clone = function() { var newObj = (this instanceof Array) ? [] : {}; for (var i in this) { if (this[i]  typeof this[i] == "object") { newObj[i] = this[i].clone(); } else { newObj[i] = this[i]; } } return newObj; }; Object.defineProperty( Object.prototype, "clone", {value: clone, enumerable: false}); 
60
26 дек. ang sagot ay ibinigay ni Zibri noong ika-26 ng Disyembre. 2009-12-26 17:59 '09 sa 17:59 2009-12-26 17:59

Alam ko na ito ay isang lumang post, ngunit naisip ko ito ay maaaring makatulong sa isang tao na stumbles.

Hangga't hindi ka nagtatakda ng isang bagay sa isang bagay, hindi ito nagpapanatili ng isang reference sa memorya. Kaya, upang lumikha ng isang bagay na nais mong ibahagi sa iba pang mga bagay, kai>

 var a = function(){ return { father:'zacharias' }; }, b = a(), c = a(); c.father = 'johndoe'; alert(b.father); 
53
24 сент. sagot na ibinigay ni Joe 24 Setyembre. 2011-09-24 22:28 '11 sa 22:28 2011-09-24 22:28

Cloning Object ay palaging isang bagay ng pag-aalala sa JS, ngunit ito ay ang lahat bago ES6, I-lista ang iba't ibang mga paraan upang kopyahin ang isang bagay sa JavaScript sa ibaba, isipin na mayroon kang isang Bagay sa ibaba at nais mong magkaroon ng isang malalim na kopya ng na:

 var obj = {a:1, b:2, c:3, d:4}; 

Mayroong maraming mga paraan upang kopyahin ang bagay na ito nang hindi binabago ang pinagmulan:

1) ES5 + gamit ang isang simpleng pag-andar upang kopyahin:

 function deepCopyObj(obj) { if (null == obj || "object" != typeof obj) return obj; if (obj instanceof Date) { var copy = new Date(); copy.setTime(obj.getTime()); return copy; } if (obj instanceof Array) { var copy = []; for (var i = 0, len = obj.length; i < len; i++) { copy[i] = cloneSO(obj[i]); } return copy; } if (obj instanceof Object) { var copy = {}; for (var attr in obj) { if (obj.hasOwnProperty(attr)) copy[attr] = cloneSO(obj[attr]); } return copy; } throw new Error("Unable to copy obj this object."); } 

2) ES5 + gamit ang JSON.parse at JSON.stringify.

 var deepCopyObj = JSON.parse(JSON.stringify(obj)); 

3) AngularJs:

 var deepCopyObj = angular.copy(obj); 

4) jQuery:

 var deepCopyObj = jQuery.extend(true, {}, obj); 

5) UnderscoreJs and Loadash:

 var deepCopyObj = _.cloneDeep(obj); //latest version UndescoreJs makes shallow copy 

Hope this help ...

52
03 апр. Ang sagot ay ibinigay Alireza Abril 03. 2017-04-03 18:37 '17 sa 6:37 ng gabi 2017-04-03 18:37

Theres a library (tinatawag na "clone") , na ginagawang medyo maganda. Nagbibigay ito ng pinaka kumpletong recursive cloning / pagkopya ng mga di-makatwirang bagay na alam ko. Sinusuportahan din nito ang mga circular na link na hindi pa sakop ng iba pang mga sagot.

Makikita mo ito sa npm . Maaari itong gamitin kapwa para sa browser at para sa Node.js.

Narito ang isang halimbawa kung paano ito gagamitin:

I-install ito sa

 npm install clone 

o i-pack ito sa Ender .

 ender build clone [...] 

Maaari mo ring i-download nang manu-mano ang source code.

Pagkatapos ay maaari mo itong gamitin sa iyong source code.

 var clone = require('clone'); var a = { foo: { bar: 'baz' } }; // inital value of a var b = clone(a); // clone a -> b a.foo.bar = 'foo'; // change a console.log(a); // { foo: { bar: 'foo' } } console.log(b); // { foo: { bar: 'baz' } } 

(Disclaimer: Im ang may-akda ng library.)

51
17 окт. ang sagot ay bibigyan ng 17 oct. 2012-10-17 21:36 '12 sa 21:36 2012-10-17 21:36

Kung gagamitin mo ito, ang Underscore.js library ay mayroong clone .

 var newObject = _.clone(oldObject); 
48
15 дек. ang sagot ay ibinigay sa pamamagitan ng itsadok 15 disyembre . 2011-12-15 18:56 '11 sa 18:56 2011-12-15 18:56

Narito ang bersyon sa itaas ng ConroyP, na gumagana kahit na nangangai>

 //If Object.create isn't already defined, we just do the simple shim, //without the second argument, since that all we need here var object_create = Object.create; if (typeof object_create !== 'function') { object_create = function(o) { function F() {} F.prototype = o; return new F(); }; } function deepCopy(obj) { if(obj == null || typeof(obj) !== 'object'){ return obj; } //make sure the returned object has the same prototype as the original var ret = object_create(obj.constructor.prototype); for(var key in obj){ ret[key] = deepCopy(obj[key]); } return ret; } 

Ang tampok na ito ay magagamit din sa aking simpleng library.

I-edit ang:

Narito ang isang mas maaasahan na bersyon (salamat sa Justin McCandles, ngayon ito ay sumusuporta sa mga pabilog na sanggunian):

  function deepCopy(src,  _visited, _copiesVisited) { if(src === null || typeof(src) !== 'object'){ return src; } //Honor native/custom clone methods if(typeof src.clone == 'function'){ return src.clone(true); } //Special cases: //Date if(src instanceof Date){ return new Date(src.getTime()); } //RegExp if(src instanceof RegExp){ return new RegExp(src); } //DOM Element if(src.nodeType  typeof src.cloneNode == 'function'){ return src.cloneNode(true); } // Initialize the visited objects arrays if needed. // This is used to detect cyclic references. if (_visited === undefined){ _visited = []; _copiesVisited = []; } // Check if this object has already been visited var i, len = _visited.length; for (i = 0; i < len; i++) { // If so, get the copy we already made if (src === _visited[i]) { return _copiesVisited[i]; } } //Array if (Object.prototype.toString.call(src) == '[object Array]') { //[].slice() by itself would soft clone var ret = src.slice(); //add it to the visited array _visited.push(src); _copiesVisited.push(ret); var i = ret.length; while (i--) { ret[i] = deepCopy(ret[i], _visited, _copiesVisited); } return ret; } //If we've reached here, we have a regular object //make sure the returned object has the same prototype as the original var proto = (Object.getPrototypeOf ? Object.getPrototypeOf(src): src.__proto__); if (!proto) { proto = src.constructor.prototype; //this line would probably only be reached by very old browsers } var dest = object_create(proto); //add this object to the visited array _visited.push(src); _copiesVisited.push(dest); for (var key in src) { //Note: this does NOT preserve ES5 property attributes like 'writable', 'enumerable', etc. //For an example of how this could be modified to do so, see the singleMixin() function dest[key] = deepCopy(src[key], _visited, _copiesVisited); } return dest; } //If Object.create isn't already defined, we just do the simple shim, //without the second argument, since that all we need here var object_create = Object.create; if (typeof object_create !== 'function') { object_create = function(o) { function F() {} F.prototype = o; return new F(); }; } 
36
11 нояб. Ang sagot ay ibinigay ni Matt Browne 11 nov. 2012-11-11 20:53 '12 sa 08:53 2012-11-11 20:53

Ang mga sumusunod ay lumilikha ng dalawang pagkakataon ng parehong bagay. Natagpuan ko ito at ginagamit ito ngayon. Ito ay simple at madaling gamitin.

 var objToCreate = JSON.parse(JSON.stringify(cloneThis)); 
31
21 авг. Sumagot na ibinigay ng nathan rogers Agosto 21 2015-08-21 18:51 '15 sa 18:51 2015-08-21 18:51

Malalim na pagkopya ng mga bagay sa javascript (sa palagay ko ang pinakamainam at pinakamadaling)

1. Paggamit ng JSON.parse (JSON.stringify (object));

 var obj = { a: 1, b: { c: 2 } } var newObj = JSON.parse(JSON.stringify(obj)); obj.bc = 20; console.log(obj); // { a: 1, b: { c: 20 } } console.log(newObj); // { a: 1, b: { c: 2 } } 

2. Gamit ang nilikha na paraan

 function cloneObject(obj) { var clone = {}; for(var i in obj) { if(obj[i] != null  typeof(obj[i])=="object") clone[i] = cloneObject(obj[i]); else clone[i] = obj[i]; } return clone; } var obj = { a: 1, b: { c: 2 } } var newObj = cloneObject(obj); obj.bc = 20; console.log(obj); // { a: 1, b: { c: 20 } } console.log(newObj); // { a: 1, b: { c: 2 } } 

3. Paggamit ng Lo-Dash _.cloneDeep link lodash

 var obj = { a: 1, b: { c: 2 } } var newObj = _.cloneDeep(obj); obj.bc = 20; console.log(obj); // { a: 1, b: { c: 20 } } console.log(newObj); // { a: 1, b: { c: 2 } } 

4. Paggamit ng Object.assign ()

 var obj = { a: 1, b: 2 } var newObj = _.clone(obj); obj.b = 20; console.log(obj); // { a: 1, b: 20 } console.log(newObj); // { a: 1, b: 2 } 

PERO BA>

 var obj = { a: 1, b: { c: 2 } } var newObj = Object.assign({}, obj); obj.bc = 20; console.log(obj); // { a: 1, b: { c: 20 } } console.log(newObj); // { a: 1, b: { c: 20 } } --> WRONG // Note: Properties on the prototype chain and non-enumerable properties cannot be copied. 

5. Paggamit ng Underscore.js _.clone link na Underscore.js

 var obj = { a: 1, b: 2 } var newObj = _.clone(obj); obj.b = 20; console.log(obj); // { a: 1, b: 20 } console.log(newObj); // { a: 1, b: 2 } 

PERO BA>

 var obj = { a: 1, b: { c: 2 } } var newObj = _.cloneDeep(obj); obj.bc = 20; console.log(obj); // { a: 1, b: { c: 20 } } console.log(newObj); // { a: 1, b: { c: 20 } } --> WRONG // (Create a shallow-copied clone of the provided plain object. Any nested objects or arrays will be copied by reference, not duplicated.) 

Mag-link medium.com

JSBEN.CH Pagganap Benchmarking Playground 1 ~ 3 http://jsben.ch/KVQLd 2019

08 авг. ang sagot ay binibigyan ng TinhNQ 08 aug. 2018-08-08 11:17 '18 sa 11:17 ; 2018-08-08 11:17

May magandang paraan ang Lodash . cloneDeep (value) :

 var objects = [{ 'a': 1 }, { 'b': 2 }]; var deep = _.cloneDeep(objects); console.log(deep[0] === objects[0]); // => false 
23
22 июня '13 в 18:03 2013-06-22 18:03 ang sagot ay ibinigay ng opensas noong Hunyo 22 '13 sa 18:03 2013-06-22 18:03

Nagmumungkahi ang Crockford (at gusto ko) upang magamit ang tampok na ito:

 function object(o) { function F() {} F.prototype = o; return new F(); } var newObject = object(oldObject); 

Ito ay maikli, gumagana tulad ng inaasahan, at hindi mo kai>


EDIT:

Ito ay isang polyfill para sa Object.create , kaya maaari mo ring gamitin ito.

 var newObject = Object.create(oldObject); 

TANDAAN. . Kung gagamitin mo ang ilan sa mga ito, maaaring mayroon kang mga problema sa i>hasOwnProperty . Dahil ang create lumilikha ng isang bagong wa>oldObject . Ngunit ito ay kapaki-pakinabang at praktikal pa rin para sa mga bagay sa pag-clone.

Halimbawa, kung oldObject.a = 5;

 newObject.a; // is 5 

a

 oldObject.hasOwnProperty(a); // is true newObject.hasOwnProperty(a); // is false 
23
06 окт. sumagot na ibinigay ni Chris Broski Oktubre 06 2010-10-06 18:08 '10 sa 18:08 2010-10-06 18:08
 function clone(obj) { var clone = {}; clone.prototype = obj.prototype; for (property in obj) clone[property] = obj[property]; return clone; } 
22
23 сент. Sumagot na ibinigay ni Mark Cidade noong Sep 23 2008-09-23 19:45 '08 at 7:45 pm 2008-09-23 19:45

Single line na kopya ng mababaw na kopya ( ECMAScript 5th edition ):

 var origin = { foo : {} }; var copy = Object.keys(origin).reduce(function(c,k){c[k]=origin[k];return c;},{}); console.log(origin, copy); console.log(origin == copy); // false console.log(origin.foo == copy.foo); // true 

Single at maliit na kopya ( ECMAScript 6th edition , 2015):

 var origin = { foo : {} }; var copy = Object.assign({}, origin); console.log(origin, copy); console.log(origin == copy); // false console.log(origin.foo == copy.foo); // true 
20
05 июля '12 в 0:44 2012-07-05 00:44 ang sagot ay ibinigay sa pamamagitan ng maël nison sa Hulyo 05 '12 sa 12:44 2012-07-05 00:44

Sapagkat hindi ko nakita ang AngularJS at naisip na nais malaman ng mga tao ...

angular.copy ay nagbibigay din ng isang paraan para sa malalim na pagkopya ng mga bagay at arrays.

17
14 мая '16 в 1:16 2016-05-14 01:16 ang sagot ay ibinigay sa Dan Atkinson sa Mayo 14 '16 sa 1:16 2016-05-14 01:16