나는 기본적으로 이전 함수를 참조하지 않고 동일한 n 차원 배열을 반환하는 일반 함수 복사 (배열)를 찾고있다.임의의 n 차원 배열을 JavaScript로 복사 하시겠습니까?
답변
이것은 (배열되지 않은) 중첩 된 개체에 대해 작동하지 않습니다, 배열 작동 : jQuery를 사용
var arr = [
[[1,2,3],[75]], 100,
[[[1]]], [],
[1,[2,[3],4],5], 6, 7, 8
];
var new_arr = copy(arr);
는 (배열 작동 :
function copy(arr){
var new_arr = arr.slice(0);
for(var i = new_arr.length; i--;)
if(new_arr[i] instanceof Array)
new_arr[i] = copy(new_arr[i]);
return new_arr;
}
이처럼 사용 및 "일반"개체) :
var a = [[1,[2,3]],[4]];
var b = $.extend(true, [], a);
a[0][0] = 42; // modify object in a
alert(JSON.stringify(b)); // [[1,[2,3]],[4]]
또는 JSON 직접 (모든 객체 인 경우는 JSON-izable) :
var a = [[1,[2,3]],[4]];
var b = JSON.parse(JSON.stringify(a))
a[0][0] = 42; // modify object in a
alert(JSON.stringify(b)); // [[1,[2,3]],[4]]
이전 버전의 IE (8? 7?)은 JSON 객체에 shim이 필요합니다.
작은 메모 : 값이'undefined '이면 JSON으로 변환되지 않습니다. –
Paulpro의 답변에 추가하고 싶었습니다. 이것은 copy (new_arr [i])를 copy (arr [i])로 변경하고 new_arr.length를 arr.length로 변경한다는 점을 제외하고는 그의 대답과 동일하다. (new_arr [I]) 일
function copy(arr){
var new_arr = arr.slice(0);
for(var i = arr.length; i--;)
if(new_arr[i] instanceof Array)
new_arr[i] = copy(arr[i]);
return new_arr;
}
이유 사본은 .slice가 복사 때문이다 [내가] 그들에게 동일하게 가리키는했다 ARR 것.
Paulpro의 답변이 모든 경우에 적용되지만, 우연히 다차원 배열의 각 구성원이 배열 또는 비 배열 중 하나 일 경우 비 배열 차원 만 분할하여 더 효율적으로 만들 수 있습니다 . 다음과 같은 재귀에 의해 단순히 겹쳐 쓰여질 포인터 배열에 복사하는 것이 무엇을 의미합니까?
function copy(arr){
if(arr[0] instanceof Array){
var new_arr = new Array(arr.length);
for(var i = arr.length; i--;)
new_arr[i] = copy(arr[i]);
}
else{var new_arr = arr.slice(0);}
return new_arr;
}
이것은 다차원 배열을 복제하는 나의 해결책입니다. 사실 N 차원 배열을 생성하고 값으로 초기화하는 함수를 만들기 위해 Array.prototype.clone()
을 발명해야했습니다.
Array.prototype.clone = function(){
return this.reduce((p,c,i) => (p[i] = Array.isArray(c) ? c.clone() : c, p),[])
}
function arrayND(...n){
return n.reduceRight((p,c) => c = (new Array(c)).fill(true).map(e => Array.isArray(p) ? p.clone() : p));
}
var arr = arrayND(...[4,4,4],8); //last argument is the initializing value
arr[0][1][3] = "eight";
console.log(JSON.stringify(arr));
- 1. 2 차원 배열에서 임의의 문자열을 선택 하시겠습니까?
- 2. n 차원 지그재그 형 배열을 통과합니다.
- 3. 임의의 데이터 배열을 N 개의 빈으로 그룹화
- 4. n 차원 벡터
- 5. 배열을 거꾸로 복사 하시겠습니까? Array.Copy?
- 6. 2 차원 배열 복사
- 7. 배열을 C# COM 개체에서 JavaScript로 전달 하시겠습니까?
- 8. PHP에서 JavaScript로 2 차원 배열을 전달하는 가장 좋은 방법은 무엇입니까?
- 9. 3 차원 배열을 C에서 함수로 전달 하시겠습니까?
- 10. 2 차원 배열을 C에서 작동하도록 전달 하시겠습니까?
- 11. n 차원 트래버스
- 12. n 차원 매칭 알고리즘
- 13. 딥 복사 2 차원 배열
- 14. JavaScript로 값으로 imageData 복사
- 15. Objective C에서 JavaScript로 복사
- 16. 치수가 가변적 일 때 n 차원 배열을 이동합니다.
- 17. 4 차원 및 n 차원 물리 엔진
- 18. N 차원 cv :: Mat의 차원 크기
- 19. 2 차원 배열을 임의로 채우십시오.
- 20. 오른쪽 2 차원 배열을 회전
- 21. Java를 사용하여 1 차원 arraylist에서 2 차원 arraylist로 데이터 복사
- 22. 2 차원 배열을 90도 회전
- 23. m 차원 배열로 된 N 차원 배열의 하위 집합을 선택 하시겠습니까?
- 24. "정상적인"2 차원 배열을 **
- 25. 3 차원 배열을 2 차원 배열로 변환
- 26. 2 차원 배열을 2 차원 배열로 변환
- 27. 어떻게 2 차원 배열을 2 차원 배열
- 28. 2 차원 배열을 1 차원 배열로
- 29. 파이썬에서 n 차원 난수 생성
- 30. n 차원 보간법 C++ 알고리즘
없음 ...하지만 나를 판단하지 않는다, 나는 자바 스크립트 초보자입니다. 나는 이것만을 보았습니다 : http://stackoverflow.com/questions/419858/how-to-deep-copy-an-irregular-2d-array, 그리고 그것은 내 사건에 대해 일반적으로 충분하지 않았습니다. – Ognjen
@Ognjen - Java는 JavaScript가 아닙니다. –
btw 내가 왜 이것을 필요로하는지 궁금하다면 java에서 js로 일부 코드를 포팅합니다. – Ognjen