어레이에서 특정 항목을 삭제하려면 어떻게 해야 합니까?

어레이에서 특정 값을 삭제하려면 어떻게 해야 합니까?예를 들어 다음과 같습니다.

array.remove(value);
// removes all elements with value 

코어 JavaScript를 사용해야 합니다.프레임워크는 허용되지 않습니다.



질문에 대한 답변



검색:index제거할 배열 요소의 경우 를 사용하여 해당 인덱스를 제거합니다.

splice() 메서드는 기존 요소를 삭제하거나 새 요소를 추가함으로써 배열 내용을 변경합니다.

const array = [2, 5, 9];
console.log(array);
const index = array.indexOf(5); if (index > -1) { // only splice array when item is found
array.splice(index, 1); // 2nd parameter means remove one item only }
// array = [2, 9] console.log(array); 

의 두 번째 파라미터splice삭제할 요소의 수입니다.주의:splice는 배치되어 있는 어레이를 변경하고 삭제된 요소를 포함하는 새 어레이를 반환합니다.


완성도를 위해 다음과 같은 기능을 제공합니다.첫 번째 함수는 단일 발생만 제거합니다(즉, 첫 번째 일치 항목 제거).5부터[2,5,9,1,5,8,5]두 번째 함수는 모든 항목을 제거합니다.

function removeItemOnce(arr, value) {
var index = arr.indexOf(value);
if (index > -1) {
arr.splice(index, 1);
}
return arr; }
function removeItemAll(arr, value) {
var i = 0;
while (i < arr.length) {
if (arr[i] === value) {
arr.splice(i, 1);
} else {
++i;
}
}
return arr; } // Usage console.log(removeItemOnce([2,5,9,1,5,8,5], 5)) console.log(removeItemAll([2,5,9,1,5,8,5], 5))

TypeScript에서는 다음 함수가 type 파라미터를 사용하여 type-safe를 유지할 수 있습니다.

function removeItem<T>(arr: Array<T>, value: T): Array<T> {
const index = arr.indexOf(value);
if (index > -1) {
arr.splice(index, 1);
}
return arr; } 



2016년 10월 편집

  • 심플하고 직관적이며 명확한 작업(Occam의 면도기)
  • 불변(원래 어레이는 변경되지 않음)
  • 브라우저가 지원하지 않는 경우 표준 JavaScript 기능으로 실행 – polyfill 사용

이 코드 예에서는 불필요한 아이템을 어레이에서 삭제하는 기능을 사용하고 있습니다.이 함수는 원래 배열을 변경하지 않고 새 배열을 만듭니다.브라우저가 이 기능을 지원하지 않는 경우(예: Internet Explorer 버전9 이전 또는 Firefox 버전 1.5 이전)로 다중 채우기를 고려하십시오.

아이템 삭제 (ECMA-262 Edition 5 코드 AKA 구식 JavaScript)

var value = 3
var arr = [1, 2, 3, 4, 5, 3]
arr = arr.filter(function(item) {
return item !== value })
console.log(arr) // [ 1, 2, 4, 5 ] 

항목 제거 중(ECMAScript 6 코드)

let value = 3
let arr = [1, 2, 3, 4, 5, 3]
arr = arr.filter(item => item !== value)
console.log(arr) // [ 1, 2, 4, 5 ] 

중요 에코스크립트 6() => {}화살표 함수 구문은 Internet Explorer, Chrome 버전 45 이전, Firefox 버전 22 이전 및 Safari 버전 10 이전에서는 전혀 지원되지 않습니다.이전 브라우저에서 ECMAScript 6 구문을 사용하려면 Babel을 사용합니다.JS.


여러 항목 제거(ECMAScript 7 코드)

이 방법의 또 다른 장점은 여러 항목을 제거할 수 있다는 것입니다.

let forDeletion = [2, 3, 5]
let arr = [1, 2, 3, 4, 5, 3]
arr = arr.filter(item => !forDeletion.includes(item)) // !!! Read below about array.includes(...) support !!!
console.log(arr) // [ 1, 4 ] 

중요한 array.includes(...)Internet Explorer, 버전 47 이전 Chrome, 버전 43 이전 Firefox, 버전 9 이전 Safari 및 버전 14 이전 Edge에서는 기능이 전혀 지원되지 않지만 로 폴리필할 수 있습니다.

여러 항목 제거(향후 가능할 수도 있음)

“This-Binding Syntax 제안이 수락되면 다음과 같은 작업을 수행할 수 있습니다.

// array-lib.js
export function remove(...forDeletion) {
return this.filter(item => !forDeletion.includes(item)) }
// main.js
import { remove } from './array-lib.js'
let arr = [1, 2, 3, 4, 5, 3]
// :: This-Binding Syntax Proposal // using "remove" function as "virtual method" // without extending Array.prototype arr = arr::remove(2, 3, 5)
console.log(arr) // [ 1, 4 ] 

BabelJS에서 직접 사용해 보세요.

언급




네가 어떻게 기대하고 있는지 모르겠다.array.remove(int)처신하다.당신이 원할지도 모르는 세 가지 가능성이 있습니다.

인덱스에서 배열 요소를 제거하려면i:

array.splice(i, 1); 

값이 있는 모든 요소를 제거하려는 경우number어레이:

for (var i = array.length - 1; i >= 0; i--) {
if (array[i] === number) {
array.splice(i, 1);
} } 

요소를 인덱스로만 작성하려면i더 이상 존재하지 않지만 다른 요소의 인덱스는 변경하지 않습니다.

delete array[i]; 



빈자리를 유지하고 싶은지 아닌지에 따라 달라집니다.

빈 슬롯을 원하는 경우:

array[index] = undefined; 

슬롯을 원하지 않는 경우:

//To keep the original: //oldArray = [...array];
//This modifies the array. array.splice(index, 1); 

또한 해당 항목의 값이 필요한 경우 반환된 배열의 요소를 저장할 수 있습니다.

var value = array.splice(index, 1)[0]; 

어레이의 양쪽 끝에서 삭제할 경우array.pop()마지막을 위해서 또는array.shift()(둘 다 아이템의 값도 반환한다)

아이템의 인덱스를 모르는 경우는, 다음을 사용할 수 있습니다.array.indexOf(item)(단순간if()한 가지 물건을 손에 넣다while()다 가져가기 위해서) array.indexOf(item)인덱스를 반환하거나-1찾을 수 없는 경우.




친구가 Internet Explorer 8에서 문제가 발생했는데 어떻게 했는지 보여줬어요.틀렸다고 했더니 여기서 답을 얻었다고 하더라고요.현재 상위 답변은 일부 브라우저(예: Internet Explorer 8)에서는 작동하지 않으며 항목이 처음 나타나는 것만 삭제합니다.

어레이에서 모든 인스턴스 제거

function removeAllInstances(arr, item) {
for (var i = arr.length; i--;) {
if (arr[i] === item) arr.splice(i, 1);
} } 

항목을 제거하면 인덱스와 길이가 변경되므로 배열을 거꾸로 루프하고 항목이 발견되면 해당 항목을 제거합니다.모든 브라우저에서 작동합니다.