Este es mi código:¿Hay algún método para clonar una matriz en jQuery?
var a=[1,2,3]
b=$.clone(a)
alert(b)
no tienen un método jQuery 'clon'? ¿Cómo puedo clonar una matriz usando jQuery?
Este es mi código:¿Hay algún método para clonar una matriz en jQuery?
var a=[1,2,3]
b=$.clone(a)
alert(b)
no tienen un método jQuery 'clon'? ¿Cómo puedo clonar una matriz usando jQuery?
Simplemente use Array.prototype.slice
.
a = [1];
b = a.slice();
jsFiddle - http://jsfiddle.net/neoswf/ebuk5/
Esto es sinónimo de 'slice (0)'? –
@Peter Ajtai - sí. –
Gracias, meder. ....... Lo único a lo que hay que tener cuidado es que las matrices son objetos, por lo que puede adjuntar propiedades y métodos ... como 'var a = [1,2,3]; a.foo = function() {alerta (esto); }; 'Con' slice() 'las propiedades y los métodos adjuntos no se copian, por lo que no se puede hacer' b.foo() '... Solo lo menciono, ya que' .clone() 'de jQuery lo hace incluye una opción de copia profunda. Por ejemplo: http://jsfiddle.net/B2LQL/ .......... Pero esto es más o menos un caso de esquina en el contexto de esta pregunta. –
tratar
if (!Array.prototype.clone) {
Array.prototype.clone = function() {
var arr1 = new Array();
for (var property in this) {
arr1[property] = typeof (this[property]) == 'object' ? this[property].clone() : this[property]
}
return arr1;
}
}
uso como
var a = [1, 2, 3]
b = a;
a.push(4)
alert(b); // alerts [1,2,3,4]
//---------------///
var a = [1, 2, 3]
b = a.clone();
a.push(4)
alert(b); // alerts [1,2,3]
Cambio
b = $. Clon (a) a b = $ (this) .clone (a) pero algún tiempo no funcionan
pero se informó
http://www.fusioncube.net/index.php/jquery-clone-bug-in-internet-explorer
Solución utiliza sencilla función de la copia incorporada de JavaScript
var a=[1,2,3];
b=clone(a);
alert(b);
function clone(obj){
if(obj == null || typeof(obj) != 'object')
return obj;
var temp = obj.constructor();
for(var key in obj)
temp[key] = clone(obj[key]);
return temp;
}
-ConroyP
Una buena alternativa es
// Shallow copy
var b = jQuery.extend({}, a);
// Deep copy
var b = jQuery.extend(true, {}, a);
-John Resig
puesto de control similares
Japón- Extender está destinado a Objetos. El primer func de Ur también estaba destinado a Object. – neoswf
Extender también funciona muy bien para una matriz, simplemente cambie el objeto vacío {} en una matriz vacía []. –
¿Qué pasa con el jQuery.merge?
copy = $.merge([], a);
Así es como yo lo he hecho:
var newArray = JSON.parse(JSON.stringify(orgArray));
esto creará una nueva copia en profundidad no relacionado con el primero (no una copia superficial).
Esto obviamente no clonará eventos y funciones, pero lo bueno es que puedes hacerlo en una sola línea y puede usarse para cualquier rey de objeto (matrices, cuerdas, números, objetos ...)
Esta obviamente no es la opción correcta para una estructura grande y compleja, pero es una línea muy bonita, y realmente el enfoque que terminé tomando. – podperson
var a=[1,2,3]
b=JSON.parse(JSON.stringify(a));
document.getElementById("demo").innerHTML = b;
<p id="demo"></p>
ES6 Utilice difundir
let arrayCopy = [...myArray];
Para matriz multidimensional clonación See - http://stackoverflow.com/questions/2294703/multidimensional-array-cloning-using -javascript – vsync
Sí. jQuery tiene un método de clonación y también se extiende con el parámetro profundo establecido en verdadero. Consulte http://api.jquery.com/clone/ y http://api.jquery.com/jquery.extend/ La opción rápida y sucia para pequeñas cantidades de datos es usar JSON.parse (JSON.stringify (original)). Para grandes cantidades de datos, ¿quizás no deberías clonar? – podperson
use spread operator – zloctb