JavaScript에서 어레이의 선두에 새로운 어레이 요소를 추가하려면 어떻게 해야 합니까?
어레이의 선두에 요소를 추가하거나 추가할 필요가 있습니다.
예를 들어 어레이가 다음과 같은 경우:
[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
- 어레이의 시작/끝에 요소를 추가합니다.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
) 요소를 직접 구현할 필요는 없습니다.
코멘트에서 지적한 바와 같이 원래 어레이의 변형을 피하고 싶다면 를 사용하여 여러 어레이를 연결할 수 있습니다.이를 통해 단일 요소를 기존 배열의 전면 또는 후면에 푸시할 수 있습니다.그러려면 새 요소를 단일 요소 배열로 변환해야 합니다.
const array = [3, 2, 1]
const newFirstElement = 4
const newArray = [newFirstElement].concat(array) // [ 4, 3, 2, 1 ]
console.log(newArray);
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 ]
console.log(newArray1);
console.log(newArray2);
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)
}
테스트 결과는 다음과 같습니다.
빠른 치트시트:
shift/unshift 및 push/pop이라는 용어는 적어도 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 )
ES6 파괴 사용(원래 어레이로부터의 돌연변이를 회피):
const newArr = [item, ...oldArr]
변환 없음
모든 것이unshift
/push
★★★★★★★★★★★★★★★★★」shift
/pop
소스 어레이를 변환합니다.
unshift
/push
begin/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+
위의 방법으로 변환 없이 어레이의 시작/끝에 추가합니다.
: 어: you you이가습 you you you you you you you you 。var arr = [23, 45, 12, 67];
하려면 , 「 」를 합니다.splice
:
var arr = [23, 45, 12, 67];
arr.splice(0, 0, 34)
console.log(arr);
배열에 새 요소를 추가하는 치트시트
const list = [23, 45, 12, 67];
list.unshift(34);
console.log(list); // [34, 23, 45, 12, 67];
2. Array#splice
const list = [23, 45, 12, 67];
list.splice(0, 0, 34);
console.log(list); // [34, 23, 45, 12, 67];
3. ES6 스프레드...
const list = [23, 45, 12, 67];
const newList = [34, ...list];
console.log(newList); // [34, 23, 45, 12, 67];
4. Array#concat
const list = [23, 45, 12, 67];
const newList = [32].concat(list);
console.log(newList); // [34, 23, 45, 12, 67];
주의: 각 예에서는 삽입할 항목을 추가함으로써 여러 항목을 추가할 수 있습니다.
가 있는 는, 「배열」의 선두에 요소를 는, 「배열」을 사용하는 이 빠릅니다.push
이 이어집니다.reverse
를 호출하지 「」를 호출합니다.unshift
★★★★★★★★★★★★★★★★★★.
벤치마크 테스트: http://jsben.ch/kLIYf
「」를 사용합니다.splice
시작 시 요소를 배열에 삽입합니다.
arrName.splice( 0, 0, 'newName1' );
여기에는 몇 가지 방법이 있습니다.
- 시프트 사용(변동 가능)
const num = 1;
const arr = [2, 3];
arr.unshift(num);
console.log(arr);
- ES6 파괴 사용(불변)
const num = 1;
const arr = [2, 3];
const newArr = [num, ...arr];
console.log(newArr);
- Array.protype.concat 사용(불변)
const num = 1;
const arr = [2, 3];
const newArr = [num].concat(arr);
console.log(newArr);
, 를 합니다.<func>.apply(<this>, <Array of args>)
:
const arr = [1, 2];
arr.unshift.apply(arr, [3, 4]);
console.log(arr); // [3, 4, 1, 2]
let arr = [5, 6];
// using unshift
arr.unshift(4);
console.log('arr : ', arr);
// using spread operator
arr = [3, ...arr];
console.log('arr : ', arr);
// using concat
arr = [2].concat(arr);
console.log('arr : ', arr);
// using splice
arr.splice(0, 0, 1)
console.log('arr : ', arr);
언급URL : https://stackoverflow.com/questions/8073673/how-can-i-add-new-array-elements-at-the-beginning-of-an-array-in-javascript
'programing' 카테고리의 다른 글
Java에서 finalize() 메서드는 언제 호출됩니까? (0) | 2022.10.01 |
---|---|
ASP.NET Entity Framework 데이터베이스 이름 가져오기 (0) | 2022.10.01 |
ES6 모듈을 조건부로 Import하려면 어떻게 해야 하나요? (0) | 2022.10.01 |
형식 힌트를 사용할 때 null 인수를 전달할 수 없습니다. (0) | 2022.10.01 |
좋은 욕설 필터는 어떻게 구현합니까? (0) | 2022.10.01 |