>  기사  >  웹 프론트엔드  >  JS에서 복사하는 방법

JS에서 복사하는 방법

不言
不言원래의
2018-07-09 16:50:222065검색

이 글에서는 어느 정도 참고할만한 가치가 있는 js에서의 복사 방법을 주로 소개하고 있습니다. 필요한 친구들이 참고할 수 있도록 하겠습니다.

딥 카피와 얕은 카피가 있습니다. js에는 일상적인 작업 검토를 용이하게 하기 위한 두 가지 일반적인 방법이 아래에 요약되어 있습니다. #

var newObj = JSON.parse(JSON.stringify( someObj ) )

#🎜🎜 # 3. es6 스프레드 연산자 스프레드 연산자 구문

const objA = { name: 'cc', age: 18 }
    const objB = { address: 'beijing' }
    const objC = {} // 这个为目标对象
    const obj = Object.assign(objC, objA, objB)    // 我们将 objA objB objC obj 分别输出看看
    console.log(objA)   // { name: 'cc', age: 18 }
    console.log(objB) // { address: 'beijing' }
    console.log(objC) // { name: 'cc', age: 18, address: 'beijing' }
    console.log(obj) // { name: 'cc', age: 18, address: 'beijing' }

    // 是的,目标对象ObjC的值被改变了。
    // so,如果objC也是你的一个源对象的话。请在objC前面填在一个目标对象{}
    Object.assign({}, objC, objA, objB)

#🎜🎜 #

4. 순회

  var obj = {                'data': [11, 2, 3],                'name': 'mfg',
                fn: function() {}
            };  var objNew = { ...obj
            };

2. 딥 카피

1. 🎜🎜#

function sallowCopy(source) {    // source 不是对象,而是【原始类型】的情况
    // 原始类型说明详见http://www.jianshu.com/p/b161aeecb6d6
    if (null == source || "object" != typeof source) return source;    
    // 其他情况都将 source 当作简单对象来处理
    var target = {};    for (var key in source) {        if (source.hasOwnProperty(key)) {  // 仅拷贝自身的属性
            target[key] = source[key];
        }
    }    return target;
}/*这个浅拷贝会将source对象上的所有[可枚举属性]都拷贝到target对象上,不包括原型链上的属性。*/

3 불변 라이브러리의 도움으로 다수의 딥 카피가 있습니다

import merge from "lodash/object/merge";function commentsById(state = {}, action) {    switch(action.type) {        default : {           if(action.entities && action.entities.comments) {               return merge({}, state, action.entities.comments.byId);
           }           return state;
        }
    }
}
# 🎜🎜#

4. jquery의 $.extend() 첫 번째 매개변수가 없으면 얕은 복사

const { Map } = require('immutable')
const map1 = Map({ a: 1, b: 2, c: 3 })
const map2 = map1.set('b', 50)
map1.get('b') // 2map2.get('b') // 50尽量保持数据

#🎜 🎜#

5.JSON 객체 방식

$.extend(true, {}, obj)

이 두 가지 방식은 확실히 익숙합니다. 두 개의 기본 JSON 객체를 사용하면 객체의 전체 복사를 매우 편리하게 실현할 수 있습니다.

이 방법에는 단점도 있습니다.

은 문자열, 숫자, 배열 등과 같이 json으로 표현할 수 있는 속성만 복사할 수 있습니다. ., Function, Regexp 등 json으로 표현되는 속성이 손실됩니다

객체의 프로토타입 체인이 손실됩니다

# 🎜🎜#

복제 효율성이 낮음

위의 단점에도 불구하고 이 방법은 대부분의 상황을 처리하기에 충분합니다.

6.Recursive copy

    var obj2 = JSON.parse(JSON.stringify(obj1))
  1. 이 방법은 위의 얕은 복사 순회 객체 방법과 비교됩니다. 이는 객체의 속성이 객체인지 여부를 확인하기 위한 추가 재귀 호출일 뿐입니다. 그렇다면 재귀 호출은 객체가 더 이상 객체가 아닐 때까지 객체를 순회합니다.
  2. 그러나 이 방법은 Function, Regexp, Error 및 기타 유형을 고려하지 않으며 더 많은 판단이 필요합니다. 그러나 핵심 아이디어는 객체를 재귀적으로 순회하여 복사하는 것입니다. JSON 딥 카피.
  3. 위 내용은 모두의 학습에 도움이 되기를 바랍니다. 더 많은 관련 내용은 PHP 중국어 홈페이지를 주목해주세요!

  4. 관련 추천:
  5. React의 PureComponent 소개

JS 문자 숫자 변환 방법

js 비동기 for 루프 소개


위 내용은 JS에서 복사하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.