Apa cara terbaik untuk mengkloning suatu objek di node.js
misalnya saya ingin menghindari situasi di mana:
var obj1 = {x: 5, y:5};
var obj2 = obj1;
obj2.x = 6;
console.log(obj1.x); // logs 6
Objek mungkin mengandung tipe kompleks sebagai atribut, jadi sederhana untuk (var x in obj1) tidak akan menyelesaikannya. Apakah saya perlu menulis klon rekursif sendiri atau ada sesuatu yang dibangun yang tidak saya lihat?
javascript
node.js
licin
sumber
sumber
npm install underscore
2.var _ = require('underscore')
3_.clone(objToClone)
.;Jawaban:
Kemungkinan 1
Salinan dalam tanpa embel-embel:
Kemungkinan 2 (usang)
Perhatian: Solusi ini sekarang ditandai sebagai usang dalam dokumentasi Node.js :
Jawaban asli ::
Untuk salinan yang dangkal, gunakan
util._extend()
fungsi bawaan Node .Kode sumber
_extend
fungsi Node ada di sini: https://github.com/joyent/node/blob/master/lib/util.jssumber
_*
seharusnya berarti itu adalah metode pribadi dan tidak boleh diandalkan?util._extend()
Metode tidak pernah dimaksudkan untuk menjadi digunakan di luar modul Node.js internal. Komunitas tetap menemukan dan menggunakannya. Itu sudah usang dan tidak boleh digunakan dalam kode baru. JavaScript hadir dengan fungsionalitasObject.assign().
Saya terkejut
Object.assign
belum disebutkan.Jika tersedia (misalnya Babel), Anda dapat menggunakan operator penyebaran objek :
sumber
Ini akan menentukan metode perluasan yang dapat Anda gunakan. Kode berasal dari artikel ini.
sumber
sumber
Object.keys()
untuk beralih melalui objekAnda dapat menggunakan fungsi extended dari JQuery:
Ada juga Node.js Plugin:
https://github.com/shimondoodkin/nodejs-clone-extend
Untuk melakukannya tanpa JQuery atau Plugin baca ini di sini:
http://my.opera.com/GreyWyvern/blog/show.dml/1725165
sumber
Lihat underscore.js . Ia memiliki clone dan extended dan banyak fungsi lain yang sangat berguna.
Ini bisa bermanfaat: Menggunakan modul Underscore dengan Node.js
sumber
Ada beberapa modul Node di luar sana jika tidak ingin "melempar sendiri". Yang ini terlihat bagus: https://www.npmjs.com/package/clone
Sepertinya itu menangani semua jenis barang, termasuk referensi melingkar. Dari halaman github :
sumber
Kode ini juga berfungsi karena metode Object.create () membuat objek baru dengan objek dan properti prototipe yang ditentukan.
sumber
Sederhana dan cara tercepat untuk mengkloning Objek di NodeJS adalah dengan menggunakan metode Object.keys (obj)
Metode Object.keys membutuhkan JavaScript 1.8.5; nodeJS v0.4.11 mendukung metode ini
tapi tentu saja untuk objek bersarang perlu menerapkan fungsi rekursif
Solusi lain adalah dengan menggunakan JSON asli (Diimplementasikan dalam JavaScript 1.7), tetapi jauh lebih lambat (~ 10 kali lebih lambat) daripada yang sebelumnya
sumber
Ada juga proyek di Github yang bertujuan untuk menjadi pelabuhan yang lebih langsung
jQuery.extend()
:https://github.com/dreamerslab/node.extend
Contoh, dimodifikasi dari dokumen jQuery :
sumber
Ada pondok perpustakaan lain , memiliki klon dan cloneDeep , juga banyak fungsi berguna lainnya.
sumber
Kalian semua menderita namun solusinya sederhana.
var obj2 = {...obj1};
// Boomsumber
Mencari opsi tiruan sejati, saya menemukan tautan ridcully di sini:
http://my.opera.com/GreyWyvern/blog/show.dml/1725165
Saya memodifikasi solusi pada halaman tersebut sehingga fungsi yang dilampirkan pada
Object
prototipe tidak dapat dihitung. Inilah hasil saya:Semoga ini bisa membantu orang lain juga. Perhatikan bahwa ada beberapa peringatan ... terutama dengan properti bernama "clone". Ini bekerja dengan baik untuk saya. Saya tidak mengambil kredit apa pun untuk menulisnya. Sekali lagi, saya hanya mengubah cara mendefinisikannya.
sumber
Anda juga dapat menggunakan SugarJS di NodeJS.
http://sugarjs.com/
Mereka memiliki fitur klon yang sangat bersih: http://sugarjs.com/api/Object/clone
sumber
Jika Anda menggunakan skrip kopi, semudah:
Padahal ini bukan tiruan yang dalam.
sumber
Tidak ada jawaban yang memuaskan saya, beberapa tidak berfungsi atau hanya klon yang dangkal, jawaban dari @ clint-harris dan menggunakan JSON.parse / stringify bagus tapi cukup lambat. Saya menemukan modul yang melakukan kloning cepat dalam: https://github.com/AlexeyKupershtokh/node-v8-clone
sumber
Tidak ada built-in cara untuk melakukan klon nyata (salinan dalam) dari suatu objek di node.js. Ada beberapa kasus tepi yang rumit sehingga Anda harus menggunakan perpustakaan untuk ini. Saya menulis fungsi seperti itu untuk perpustakaan simpleoo saya . Anda dapat menggunakan
deepCopy
fungsi tanpa menggunakan apa pun dari perpustakaan (yang cukup kecil) jika Anda tidak membutuhkannya. Fungsi ini mendukung kloning beberapa tipe data, termasuk array, tanggal, dan ekspresi reguler, mendukung referensi rekursif, dan juga bekerja dengan objek yang fungsi konstruktornya memiliki parameter yang diperlukan.Ini kodenya:
sumber
Cloner tercepat, itu membuka metode klon asli dari node.js
sumber
Solusi lain adalah merangkum langsung dalam variabel baru menggunakan:
obj1= {...obj2}
sumber
Anda juga dapat menggunakan pustaka klon ini untuk objek klon dalam.
sumber
Anda bisa membuat prototipe objek dan kemudian memanggil objek contoh setiap kali Anda ingin menggunakan dan mengubah objek:
Anda juga bisa meneruskan argumen ke konstruktor objek
Semoga ini bisa membantu.
sumber