Это мой код:Есть ли способ клонировать массив в jQuery?
var a=[1,2,3]
b=$.clone(a)
alert(b)
Не JQuery есть метод 'клон'? Как я могу клонировать массив с помощью jQuery?
Это мой код:Есть ли способ клонировать массив в jQuery?
var a=[1,2,3]
b=$.clone(a)
alert(b)
Не JQuery есть метод 'клон'? Как я могу клонировать массив с помощью jQuery?
Просто используйте Array.prototype.slice
.
a = [1];
b = a.slice();
JSFiddle - http://jsfiddle.net/neoswf/ebuk5/
Это синоним 'slice (0)'? –
@Peter Ajtai - да. –
Спасибо meder. ....... Единственное, на что нужно обратить внимание, это то, что массивы являются объектами, поэтому вы можете прикреплять свойства и методы ... например, var var = = [1,2,3]; a.foo = function() {alert (this); }; 'С' slice() 'любые прикрепленные свойства и методы не копируются, поэтому вы не можете выполнить' b.foo() '... Я только выношу это, поскольку jQuery' .clone() 'делает включить опцию глубокой копии. Например: http://jsfiddle.net/B2LQL/ .......... Но это в значительной степени краеугольный случай в контексте этого вопроса. –
попробовать
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;
}
}
использование в качестве
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]
Изменить
б = $. Клон (а) к Ь = $ (это) .clone (а), но некоторое время не работают
но сообщается
http://www.fusioncube.net/index.php/jquery-clone-bug-in-internet-explorer
Решение вы используете простую встроенную функцию клонирования в 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
Отличная альтернатива является
// Shallow copy
var b = jQuery.extend({}, a);
// Deep copy
var b = jQuery.extend(true, {}, a);
-John Resig
Проверить аналогичный пост
Япония. Расширение предназначено для объектов. Первоначальная функция Ur также была предназначена для Object. – neoswf
Расширьте работу отлично для массива, просто замените пустой объект {} на пустой массив []. –
А как насчет jQuery.merge?
copy = $.merge([], a);
Это, как я сделал это:
var newArray = JSON.parse(JSON.stringify(orgArray));
это создаст новую глубокую копию, не связанной с первой (не мелкой копией).
также это, очевидно, не будет клонировать события и функции, но хорошо, что вы можете сделать это в одной строке, и его можно использовать для любого короля объекта (массивы, строки, числа, объекты ...)
Это, очевидно, не самый подходящий вариант для большой сложной структуры, но это довольно приятный однострочный лайнер, и на самом деле подход, который я в конечном итоге взял. – podperson
var a=[1,2,3]
b=JSON.parse(JSON.stringify(a));
document.getElementById("demo").innerHTML = b;
<p id="demo"></p>
ES6 Пожалуйста, используйте распространять
let arrayCopy = [...myArray];
Для многомерных массивов клонировании см - http://stackoverflow.com/questions/2294703/multidimensional-array-cloning-using -javascript – vsync
Да. jQuery имеет метод клонирования, а также расширяется с глубоким параметром, установленным в true. См. Http://api.jquery.com/clone/ и http://api.jquery.com/jquery.extend/. Быстрый и грязный вариант для небольших объемов данных - использовать JSON.parse (JSON.stringify (оригинал)). Для больших объемов данных, возможно, вы не должны клонировать ?! – podperson
use spread operator – zloctb