Клонирование объекта в javascript - программирование
Подтвердить что ты не робот

Клонирование объекта в javascript

Ниже первые журналы 0, а затем журналы 1. Как сохранить копию объекта, а не ссылку на него?

debug.log(vi.details.segment);
vi.nextSegment = vi.details;
vi.nextSegment.segment++;
debug.log(vi.details.segment);
4b9b3361

Ответ 1

Чтобы клонировать объект в jQuery:

var vi.nextSegment = jQuery.extend({}, vi.details);

ПРИМЕЧАНИЕ. Вышеупомянутая информация представляет собой мелкую копию: любые вложенные объекты или массивы будут скопированы по ссылке - это означает, что любые изменения, внесенные вами в vi.nextSegment.obj[prop], будут отражены в vi.details.obj[prop]. Если вы хотите совершенно новый объект, который полностью отделен от оригинала, вам нужно сделать глубокую копию (передать true в качестве первого параметра):

var vi.nextSegment = jQuery.extend(true, {}, vi.details);

Чтобы узнать больше о расширении, см. здесь.

Ответ 3

Это сработало лучше для меня клонирования объекта с помощью jQuery "parseJSON()" и "JSON.stringify()"

$.ajax({
  url: 'ajax/test.html',
  dataType: 'json',
  success: function(data) {
    var objY = $.parseJSON(JSON.stringify(data));
    var objX = $.parseJSON(JSON.stringify(data));
  }
});

Объект клонирования данных в objX и objY - это два разных объекта, вам не нужно испортить проблему "по ссылке"

Gracias!

Ответ 4

Другой способ клонирования объекта -

newObj = JSON.parse(JSON.stringify(oldObj));

Но будьте осторожны, если он содержит даты. В этом случае JSON.parse вернет date.toString() вместо даты.

Ответ 5

Вот как я копирую элементы несколько раз:

Сначала у меня есть шаблон:

<div class="forms-container">
    <div class="form-template">
        First Name <input>
         .. a lot of other data ...
        Last Name <input>
     <div>
     <button onclick="add_another();">Add another!</button>
<div>

Теперь JavaScript:

function add_another(){
    jQuery(".form-template").clone().appendTo(".forms-container");
}

Ответ 6

Попробуйте Immutable.js:

Так как jQuery в основном имеет дело с DOM Elements, это может быть не лучший инструмент для задания. Immutable.js - библиотека 56 kb (minified), созданная Facebook.

// roughly implementing
import Immutable from 'immutable'
//
const oldObj = { foo: 'bar', bar: 'baz' }
// create a map from the oldObj and then convert it to JS Object
const newObj = Immutable.Map(oldObj).toJS()

Таким образом, вы эффективно клонировали newObj из oldObj. В принципе, если у вас уже нет Map, тогда нам нужно сначала создать Map. Карта похожа на blue-print, с которой мы работаем, чтобы создать copies.

Ссылки:

Главная - Immutable

Документы - Неизменяемые документы

GitHub - Immutable @GitHub

Удачи.