어레이에서 특정 값을 삭제하려면 어떻게 해야 합니까?예를 들어 다음과 같습니다.
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 ]
언급
네가 어떻게 기대하고 있는지 모르겠다.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);
} }
항목을 제거하면 인덱스와 길이가 변경되므로 배열을 거꾸로 루프하고 항목이 발견되면 해당 항목을 제거합니다.모든 브라우저에서 작동합니다.