programing

JavaScript에서 개체 복제

codeshow 2023. 10. 19. 22:53
반응형

JavaScript에서 개체 복제

아래 첫번째 로그0, 그리고 로그들을1. 개체에 대한 참조가 아닌 개체의 복사본을 저장하려면 어떻게 해야 합니까?

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

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);

자세한 내용은 여기를 참조하십시오.

게시물을 보십시오.자바스크립트 객체를 복제하는 가장 효율적인 방법은 무엇입니까?

John Resig의 답변:

// Shallow copy
var newObject = jQuery.extend({}, oldObject);

// Deep copy
var newObject = jQuery.extend(true, {}, oldObject);

자세한 내용은 jQuery 설명서에서 확인할 수 있습니다.

이것은 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에서 데이터 개체를 복제하는 것은 서로 다른 개체이므로 "참조로" 문제를 해결할 필요가 없습니다.

그라시아스!

개체를 복제하는 또 다른 방법은

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

하지만 날짜가 포함되어 있으면 조심해야 합니다.이 경우 JSON.parse는 날짜 대신 날짜.를 String()으로 반환합니다.

이렇게 요소를 여러 번 복사합니다.

먼저 템플릿이 있습니다.

<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>

자, 자바스크립트:

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

해라Immutable.js:

부터jQuery주로 다루다DOM Elements, 작업에 적합한 도구가 아닐 수도 있습니다.Immutable.js56 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첫째. 지도는 a와 같습니다.blue-print우리가 협력해서 만들어낸 것입니다.copies.

참조:

홈 - 불변

문서 - 불변 문서

깃허브 - 불변@GitHub

행운을 빌어요.

초기 개체를 유지해야 하지만 새 옵션으로 데이터를 재정의해야 하는 경우 여러 개체를 true on first 옵션으로 $.extend(jQuery)에 전달할 수 있습니다.

var opts_default = {opt1: true, opt2: false};
var opts_new = {opt1: false};
var opts_final = $.extend(true, {}, opts_default, opts_new);

언급URL : https://stackoverflow.com/questions/5364650/cloning-an-object-in-javascript

반응형