배열의 시작 부분에 요소를 추가하거나 추가해야합니다.
예를 들어 내 배열이 다음과 같은 경우
[23, 45, 12, 67]
그리고 내 AJAX 호출의 응답은입니다 34
. 업데이트 된 배열이 다음과 같기를 원합니다.
[34, 23, 45, 12, 67]
현재 다음과 같이 할 계획입니다.
var newArray = [];
newArray.push(response);
for (var i = 0; i < theArray.length; i++) {
newArray.push(theArray[i]);
}
theArray = newArray;
delete newArray;
더 좋은 방법이 있습니까? Javascript에는이를 수행하는 내장 기능이 있습니까?
내 방법의 복잡성 O(n)
은 더 나은 구현을 보는 것이 정말 흥미로울 것입니다.
답변
사용하십시오 unshift
. 마치 push
배열 대신 배열의 시작 부분에 요소를 추가한다는 점을 제외하면 같습니다 .
unshift
/push
-배열의 시작 / 끝에 요소 추가shift
/pop
-배열의 첫 번째 / 마지막 요소를 제거하고 반환
간단한 다이어그램 …
unshift -> array <- push
shift <- array -> pop
및 차트 :
add remove start end
push X X
pop X X
unshift X X
shift X X
MDN 어레이 설명서를 확인하십시오 . 배열에서 요소를 푸시 / 팝핑 할 수있는 거의 모든 언어에는 요소를 이동 / 이동 (때로는 push_front
/ 라고도 함 pop_front
) 할 수있는 기능이 있으므로 직접 구현할 필요는 없습니다.
주석에서 지적했듯이 원래 배열을 변경하지 않으려면을 사용 concat
하면 두 개 이상의 배열을 함께 연결할 수 있습니다. 이를 사용하여 단일 요소를 기능적으로 기존 어레이의 앞면 또는 뒷면에 밀어 넣을 수 있습니다. 이렇게하려면 새 요소를 단일 요소 배열로 바꿔야합니다.
const array = [ 3, 2, 1 ]
const newFirstElement = 4
const newArray = [newFirstElement].concat(array) // [ 4, 3, 2, 1 ]
concat
항목을 추가 할 수도 있습니다. 인수 concat
는 모든 유형이 될 수 있습니다. 배열이 아닌 경우 단일 요소 배열에 내재적으로 래핑됩니다.
const array = [ 3, 2, 1 ]
const newLastElement = 0
// Both of these lines are equivalent:
const newArray1 = array.concat(newLastElement) // [ 3, 2, 1, 0 ]
const newArray2 = array.concat([newLastElement]) // [ 3, 2, 1, 0 ]
답변
var a = [23, 45, 12, 67];
a.unshift(34);
console.log(a); // [34, 23, 45, 12, 67]
답변
ES6에서는 스프레드 연산자를 사용하십시오 ...
.
데모
var arr = [23, 45, 12, 67];
arr = [34, ...arr]; // RESULT : [34,23, 45, 12, 67]
console.log(arr)
답변
이를 수행하는 또 다른 방법 concat
var arr = [1, 2, 3, 4, 5, 6, 7];
console.log([0].concat(arr));
의 차이 concat
와는 unshift
즉 concat
반환 새로운 배열. 그들 사이의 성능은 여기 에서 찾을 수 있습니다 .
function fn_unshift() {
arr.unshift(0);
return arr;
}
function fn_concat_init() {
return [0].concat(arr)
}
테스트 결과는 다음과 같습니다
답변
빠른 치트 시트 :
시프트 / 언 시프트 및 푸시 / 팝이라는 용어는 적어도 C로 프로그래밍에 익숙하지 않은 사람들에게는 약간 혼란 스러울 수 있습니다.
링고에 익숙하지 않은 경우 다음과 같은 대체 용어를 빠르게 번역하여 기억하기가 더 쉽습니다.
* array_unshift() - (aka Prepend ;; InsertBefore ;; InsertAtBegin )
* array_shift() - (aka UnPrepend ;; RemoveBefore ;; RemoveFromBegin )
* array_push() - (aka Append ;; InsertAfter ;; InsertAtEnd )
* array_pop() - (aka UnAppend ;; RemoveAfter ;; RemoveFromEnd )
답변
배열이 있습니다. var arr = [23, 45, 12, 67];
처음에 항목을 추가하려면 다음을 사용하십시오 splice
.
var arr = [23, 45, 12, 67];
arr.splice(0, 0, 34)
console.log(arr);
답변
돌연변이없이
실제로 모든 unshift
/ push
및 shift
/ 는 원점 배열을 pop
변경 합니다.
은 unshift
/ push
시작 / 끝에서 존재 배열에 항목을 추가 shift
/ pop
배열의 시작 / 끝에서 항목을 제거합니다.
그러나 돌연변이없이 배열에 항목을 추가하는 방법은 거의 없습니다. 결과는 배열의 끝에 추가하기 위해 새 배열입니다. 아래 코드를 사용하십시오.
const originArray = ['one', 'two', 'three'];
const newItem = 4;
const newArray = originArray.concat(newItem); // ES5
const newArray2 = [...originArray, newItem]; // ES6+
원래 배열의 시작 부분에 추가하려면 아래 코드를 사용하십시오.
const originArray = ['one', 'two', 'three'];
const newItem = 0;
const newArray = (originArray.slice().reverse().concat(newItem)).reverse(); // ES5
const newArray2 = [newItem, ...originArray]; // ES6+
위의 방법으로, 돌연변이없이 배열의 시작 / 끝에 추가합니다.