[javascript] Map 인스턴스 복제 / 복사

자바 스크립트에서 맵을 어떻게 복제 / 복사하나요?

어레이를 복제하는 방법을 알고 있지만 맵을 복제 / 복사하려면 어떻게합니까?

var myArray = new Array(1, 2, 3);
var copy    = myArray.slice();
// now I can change myArray[0] = 5; & it wont affect copy array

// Can I just do the same for map?
var myMap = new ?? // in javascript is it called a map?
var myMap = {"1": 1, "2", 2};
var copy  = myMap.slice();



답변

단순 복사를 수행하는 간단한 방법은 소스 맵의 각 속성을 대상 맵에 복사하는 것입니다.

var newMap = {};
for (var i in myMap)
   newMap[i] = myMap[i];

참고 : newMap [i]는 myMap [i]와 동일한 객체에 대한 참조 일 수 있습니다.


답변

자바 스크립트에지도가 도입됨에 따라 생성자가 이터 러블을 허용한다는 점을 고려하면 매우 간단합니다.

var newMap = new Map(existingMap)

문서 : https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map


답변

당신이 말하는 것은 단지 객체이기 때문에 맵을 복제하는 것은 매우 간단합니다. MapES6 에는 조회해야하는 항목이 있지만 객체를 복사하려면 다음을 사용하십시오.Object.assign()

let map = {"a": 1, "b": 2}
let copy = Object.assign({}, map);

cloneDeep()Lodash 에서도 사용할 수 있습니다.

let copy = cloneDeep(map);


답변

JQuery에는 객체를 확장 (두 객체 병합)하는 방법이 있지만이 방법은 빈 객체를 제공하여 객체를 복제하는 데 사용할 수도 있습니다.

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

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

더 많은 정보는 jQuery 문서 에서 찾을 수 있습니다 .


답변

내장 된 것이 없습니다.

잘 테스트 된 재귀 속성 복사기를 사용하거나 성능이 문제가되지 않는 경우 JSON으로 직렬화하고 새 개체로 다시 구문 분석합니다.


답변

기본 제공 클론 / 복사본이 없습니다. 얕은 또는 전체 복사에 고유 한 메서드를 작성할 수 있습니다.

function shallowCopy(obj) {
    var result = {};
    for (var i in obj) {
        result[i] = obj[i];
    }
    return result;
}

function deepCopy(obj) {
    var result = {};
    for (var i in obj) {
        // recursion here, though you'll need some non-trivial logic
        // to avoid getting into an endless loop.
    }
    return result;
}

Javascript의 모든 개체는 동적이며 새 속성을 할당 할 수 있습니다. “지도”는 실제로는 빈 개체 일뿐입니다. 배열은 또한 다음과 같은 방법으로 목적, slice추천 및 특성 length.


답변

지도의 전체 복사본을 만들어야하는 경우 다음을 사용할 수 있습니다.

new Map(JSON.parse(JSON.stringify(Array.from(source))));

source원래 Map 객체는 어디에 있습니까 ?

이는 Map 값이 직렬화되지 않는 모든 사용 사례에 적합하지 않을 수 있습니다. 자세한 내용은 https://stackoverflow.com/a/122704/10583071을 참조하십시오.