반응형
원래 배열을 변경하지 않고 어떻게 배열을 정렬 할 수 있습니까?
입력 된 배열의 정렬 된 사본을 반환하는 정렬 함수를 원한다고 가정 해 봅시다. 나는 순진하게 이것을 시도했다.
function sort(arr) {
return arr.sort();
}
그리고 이것을 테스트하여 내 sort
방법이 배열을 변경하고 있음을 보여줍니다 .
var a = [2,3,7,5,3,7,1,3,4];
sort(a);
alert(a); //alerts "1,2,3,3,3,4,5,7,7"
나는 또한이 접근법을 시도했다.
function sort(arr) {
return Array.prototype.sort(arr);
}
그러나 전혀 작동하지 않습니다.
이 방법에 대한 간단한 방법이 있습니까? 가능하면 내 자체 정렬 알고리즘을 수동으로 롤링하거나 배열의 모든 요소를 새 것으로 복사 할 필요가없는 방법이 있습니까?
배열을 복사하십시오. 여러 가지 방법이 있습니다.
function sort(arr) {
return arr.concat().sort();
}
// Or:
return Array.prototype.slice.call(arr).sort(); // For array-like objects
es6의 다른 방법 (비 복사) :
const sorted = [...arr].sort();
배열 리터럴로서의 확산 구문 (mdn에서 복사) :
var arr = [1, 2, 3];
var arr2 = [...arr]; // like arr.slice()
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_operator
다음을 시도하십시오
function sortCopy(arr) {
return arr.slice(0).sort();
}
slice(0)
식은 요소 0 어레이 개시의 복사본을 생성한다.
인수없이 slice를 사용하여 배열을 복사 할 수 있습니다.
var foo,
bar;
foo = [3,1,2];
bar = foo.slice().sort();
당신은 또한 이것을 할 수 있습니다
d = [20, 30, 10]
e = Array.from(d)
e.sort()
이러한 방식으로 d는 돌연변이되지 않을 것이다.
function sorted(arr) {
temp = Array.from(arr)
return temp.sort()
}
//Use it like this
x = [20, 10, 100]
console.log(sorted(x))
필자 는 대부분의 복사본에 Object.assign () 을 사용합니다 .
var copyArray = Object.assign([], originalArray).sort();
그러나 OP 주석을 살펴본 후 약간의 깊은 복사를 연구하고 Object.assign이 얕은 복사를 수행 할뿐만 아니라 열거 할 수 있고 고유 한 속성 만 선택합니다 ( 이 게시물 에서 답변 ).
반응형
'Programing' 카테고리의 다른 글
Java List.add () UnsupportedOperationException (0) | 2020.05.15 |
---|---|
Python으로 Windows에서 실행 중인지 어떻게 확인합니까? (0) | 2020.05.15 |
SVN 작업 디렉토리에서 모든 변경 사항을 제거하려면 어떻게해야합니까? (0) | 2020.05.15 |
Flexbox : 행당 4 개 항목 (0) | 2020.05.15 |
얕은 복사, 딥 카피 및 일반 할당 작업의 차이점은 무엇입니까? (0) | 2020.05.15 |