Есть ли способ клонировать массив в JQuery? - PullRequest
59 голосов
/ 23 сентября 2010

Это мой код:

var a=[1,2,3]
b=$.clone(a)
alert(b)

Разве в jQuery нет метода 'клонирования'? Как я могу клонировать массив с помощью jQuery?

Ответы [ 8 ]

152 голосов
/ 23 сентября 2010

Просто используйте Array.prototype.slice.

a = [1];
b = a.slice();

JSFiddle - http://jsfiddle.net/neoswf/ebuk5/

10 голосов
/ 27 ноября 2012

А как насчет jQuery.merge ?

copy = $.merge([], a);
7 голосов
/ 23 апреля 2014

Вот как я это сделал:

var newArray = JSON.parse(JSON.stringify(orgArray));

это создаст новую глубокую копию, не связанную с первой (не мелкую копию).

также это, очевидно, не будет клонировать события и функции, но хорошо, что вы можете сделать это в одной строке, и это может быть использовано для любого типа объектов (массивов, строк, чисел, объектов ...)

6 голосов
/ 23 сентября 2010

Изменить

b = $. Clone (a) на b = $ (this) .clone (a) , но этонекоторое время не работает

, но сообщается

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

Проверить аналогичный пост

1 голос
/ 23 сентября 2010

Другой вариант - использовать Array.concat:

var a=[1,2,3]
var b=[].concat(a);
1 голос
/ 23 сентября 2010

попробовать

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]​
0 голосов
/ 18 декабря 2017

ES6 Пожалуйста, используйте спред

let arrayCopy = [...myArray];
0 голосов
/ 11 февраля 2016

var a=[1,2,3]
b=JSON.parse(JSON.stringify(a));
document.getElementById("demo").innerHTML = b;
<p id="demo"></p>
...