답변:
을 index
사용하여 제거하려는 배열 요소를 indexOf
찾은 다음을 사용하여 해당 인덱스를 제거하십시오 splice
.
splice () 메서드는 기존 요소를 제거하거나 새 요소를 추가하여 배열의 내용을 변경합니다.
const array = [2, 5, 9];
console.log(array);
const index = array.indexOf(5);
if (index > -1) {
array.splice(index, 1);
}
// array = [2, 9]
console.log(array);
의 두 번째 매개 변수는 splice
제거 할 요소의 수입니다. splice
배열 을 적절하게 수정하고 제거 된 요소가 포함 된 새 배열을 반환합니다.
완성을 위해 여기에 기능이 있습니다. 첫 번째 함수는 단일 항목 만 제거합니다 (예 : 5
from의 첫 번째 일치 항목 제거 [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;
}
array.indexOf(testValue)
빈 배열에서 -1이되고 테스트 할 경우 스플 라이스가 없습니다. 그 이후로 답이 변했을 수도 있습니다.
당신이 어떻게 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];
delete
배열에서 요소를 제거하는 올바른 방법이 아닙니다!
array.hasOwnProperty(i)
반환 false
하고 그 위치에 요소 를 반환 하도록하려는 경우 작동합니다 undefined
. 그러나 저는 이것이하고자하는 일반적인 일이 아니라는 것을 인정할 것입니다.
delete
배열의 길이를 업데이트하지 않고 요소를 실제로 지우지 않고 특수 값으로 만 바꿉니다 undefined
.
undefined
: 그것은 인덱스 배열에서 값을 모두 제거하고, 즉 후에 delete array[0]
, "0" in array
false를 반환한다.
delete
왜 작동하지 않는지를 이해 하지 못하는 사람들에게 도움이됩니다 .
이 코드 예제에서는 "array.filter (...)" 함수를 사용하여 배열에서 불필요한 항목을 제거합니다. 이 함수는 원래 배열을 변경하지 않고 새 배열을 만듭니다. 브라우저가이 기능을 지원하지 않는 경우 (예 : 버전 9 이전의 Internet Explorer 또는 버전 1.5 이전의 Firefox) Mozilla의 필터 폴리 필 사용을 고려 하십시오 .
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 ]
let value = 3
let arr = [1, 2, 3, 4, 5, 3]
arr = arr.filter(item => item !== value)
console.log(arr)
// [ 1, 2, 4, 5 ]
중요 ECMAScript 6 "() => {}"화살표 함수 구문은 Internet Explorer, 45 이전 버전의 Chrome, 22 이전 버전의 Firefox 및 10 이전 버전의 Safari에서 전혀 지원되지 않습니다. 이전 브라우저에서 ECMAScript 6 구문을 사용하려면 BabelJS 를 사용할 수 있습니다 .
이 방법의 또 다른 장점은 여러 항목을 제거 할 수 있다는 것입니다
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에서 전혀 지원되지 않으므로 Mozilla의 polyfill입니다 .
는 IF '구문이 바인딩의 " 제안이 지금까지 받아 들여,이 작업을 수행 할 수 있습니다 :
// 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 ]
참고
filter
큰 배열의 경우 훨씬 느려 야합니까?
filter
성능이 느려질 수 있지만 더 안전하고 더 나은 코드입니다. 또한 람다에 두 번째 인수를 지정하여 색인별로 필터링 할 수 있습니다.arr.filter((x,i)=>i!==2)
빈 자리를 유지할지 여부에 따라 다릅니다.
빈 슬롯을 원하면 삭제해도됩니다.
delete array[index];
그렇지 않으면 접속 방법을 사용해야합니다 .
array.splice(index, 1);
그리고 해당 항목의 값이 필요한 경우 반환 된 배열의 요소를 저장할 수 있습니다.
var value = array.splice(index, 1)[0];
어떤 순서로 수행하려는 경우 array.pop()
마지막 또는 array.shift()
첫 번째에 사용할 수 있습니다 (둘 다 항목 값도 반환).
그리고 당신이 항목의 색인을 모른다면, 당신은 array.indexOf(item)
그것을 얻을 수 있습니다 (a if()
에서 하나의 항목을 얻거나 a while()
에서 모든 항목 을 얻습니다). array.indexOf(item)
인덱스 또는 찾지 못한 경우 -1을 반환합니다.
delete
배열에서 요소를 제거하는 올바른 방법이 아닙니다!
array[index] = undefined;
. 를 사용 delete
하면 최적화가 파괴됩니다.
친구가 Internet Explorer 8 에서 문제가 발생하여 자신이 한 일을 보여주었습니다. 나는 그것이 틀렸다고 말했고, 그는 여기에 답이 있다고 말했다. 현재 최고 답변은 일부 브라우저 (예 : Internet Explorer 8)에서 작동하지 않으며 항목의 첫 번째 항목 만 제거합니다.
function remove(arr, item) {
for (var i = arr.length; i--;) {
if (arr[i] === item) {
arr.splice(i, 1);
}
}
}
배열을 거꾸로 반복합니다 (항목이 제거됨에 따라 색인과 길이가 변경되므로). 발견되면 항목을 제거합니다. 모든 브라우저에서 작동합니다.
i = arr.length -1
하거나 i--
최대 인덱스와 동일 하기 때문에 그렇게되어서는 안됩니다 . arr.length
의 초기 값입니다 i
. i--
는 (거짓 값)과 같아 질 때까지 항상 진실되고 (각 루프 연산에서 1 씩 감소 0
) 루프는 정지합니다.
arr.filter(function (el) { return el !== item })
. 이것은 약간의 메모리를 소비하지만 수행해야 할 작업이 적기 때문에 훨씬 효율적으로 작동합니다.
두 가지 주요 접근 방식이 있습니다.
접속 () :anArray.splice(index, 1);
삭제 :delete anArray[index];
배열에 delete를 사용할 때주의하십시오. 객체의 속성을 삭제하는 데는 좋지만 배열에는 좋지 않습니다. 사용하는 것이 좋습니다splice
배열 하는 .
delete
배열에 사용할 때의 결과가 잘못 될 수 anArray.length
있습니다. 다시 말해,delete
요소를 제거하지만 length 속성 값은 업데이트하지 않습니다.
또한 삭제를 사용한 후 색인 번호에 구멍이있을 것으로 예상 할 수 있습니다. 예를 들어 삭제를 사용하기 전의 색인 1, 3, 4, 8, 9 및 11 및 길이를 가질 수 있습니다. 이 경우 모든 색인 생성for
인덱스가 더 이상 순차적이지 않기 때문에 루프가 충돌합니다.
당신이 사용을 강제하는 경우 delete
어떤 이유로, 당신은 사용해야 for each
당신이 배열을 통해 루프를 필요로 할 때 루프를. 실제로 for
가능한 경우 항상 색인 루프를 사용하지 마십시오 . 그렇게하면 코드가 더 강력 해지고 인덱스 문제가 덜 발생합니다.
Array.prototype.remByVal = function(val) {
for (var i = 0; i < this.length; i++) {
if (this[i] === val) {
this.splice(i, 1);
i--;
}
}
return this;
}
//Call like
[1, 2, 3, 4].remByVal(3);
Array.prototype.remByVal = function(val) {
for (var i = 0; i < this.length; i++) {
if (this[i] === val) {
this.splice(i, 1);
i--;
}
}
return this;
}
var rooms = ['hello', 'something']
rooms = rooms.remByVal('hello')
console.log(rooms)
for in
배열에서 작업하는 경우 이미 문제가 있습니다.
for in
배열에, 당신은 이미 더 큰 문제가있다.
사용할 필요가 없다 indexOf
거나 splice
. 그러나 한 요소 만 제거하려는 경우 성능이 더 좋습니다.
찾아서 이동 (이동) :
function move(arr, val) {
var j = 0;
for (var i = 0, l = arr.length; i < l; i++) {
if (arr[i] !== val) {
arr[j++] = arr[i];
}
}
arr.length = j;
}
사용 indexOf
및 splice
(색인) :
function indexof(arr, val) {
var i;
while ((i = arr.indexOf(val)) != -1) {
arr.splice(i, 1);
}
}
사용 splice
(접합) :
function splice(arr, val) {
for (var i = arr.length; i--;) {
if (arr[i] === val) {
arr.splice(i, 1);
}
}
}
1000 개의 요소가있는 배열에 대한 nodejs의 런타임 (평균 10000 회 실행) :
indexof 는 이동 보다 약 10 배 느립니다 . 에 호출을 제거하여 개선 되더라도 indexOf
에서 스플 라이스 그것보다 훨씬 더 수행 이동 .
Remove all occurrences:
move 0.0048 ms
indexof 0.0463 ms
splice 0.0359 ms
Remove first occurrence:
move_one 0.0041 ms
indexof_one 0.0021 ms
이것은 값 대신 술어를 제공합니다.
참고 : 주어진 배열을 업데이트하고 영향을받는 행을 반환합니다.
var removed = helper.removeOne(arr, row => row.id === 5 );
var removed = helper.remove(arr, row => row.name.startsWith('BMW'));
var helper = {
// Remove and return the first occurrence
removeOne: function(array, predicate) {
for (var i = 0; i < array.length; i++) {
if (predicate(array[i])) {
return array.splice(i, 1);
}
}
},
// Remove and return all occurrences
remove: function(array, predicate) {
var removed = [];
for (var i = 0; i < array.length;) {
if (predicate(array[i])) {
removed.push(array.splice(i, 1));
continue;
}
i++;
}
return removed;
}
};
필터 방법으로 쉽게 할 수 있습니다 .
function remove(arrOriginal, elementToRemove){
return arrOriginal.filter(function(el){return el !== elementToRemove});
}
console.log(remove([1, 2, 1, 0, 3, 1, 4], 1));
이 배열의 모든 요소를 제거하고 또한 조합보다 더 빠르게 작동 slice
하고 indexOf
.
John Resig 는 훌륭한 구현을 게시했습니다 .
// Array Remove - By John Resig (MIT Licensed)
Array.prototype.remove = function(from, to) {
var rest = this.slice((to || from) + 1 || this.length);
this.length = from < 0 ? this.length + from : from;
return this.push.apply(this, rest);
};
전역 객체를 확장하지 않으려는 경우 대신 다음과 같은 작업을 수행 할 수 있습니다.
// Array Remove - By John Resig (MIT Licensed)
Array.remove = function(array, from, to) {
var rest = array.slice((to || from) + 1 || array.length);
array.length = from < 0 ? array.length + from : from;
return array.push.apply(array, rest);
};
그러나 내가 이것을 게시하는 주된 이유는 사용자에게 해당 페이지의 의견에서 제안 된 대체 구현에 대해 경고하기위한 것입니다 (2007 년 12 월 14 일).
Array.prototype.remove = function(from, to){
this.splice(from, (to=[0,from||1,++to-from][arguments.length])<0?this.length+to:to);
return this.length;
};
처음에는 잘 작동하는 것처럼 보이지만 고통스러운 프로세스를 통해 배열에서 두 번째에서 마지막 요소를 제거하려고 할 때 실패한다는 것을 알았습니다. 예를 들어 10 요소 배열이 있고 9 번째 요소를 제거하려고 시도하는 경우 :
myArray.remove(8);
결국 8 요소 배열로 끝납니다. 이유를 모르지만 John의 원래 구현에는이 문제가 없음을 확인했습니다.
Object.prototype.hasOwnProperty
항상 열심히 사용하는 것이 좋은 생각인지 어려운 방법으로 배웠습니다
Underscore.js 는 여러 브라우저의 문제를 해결하는 데 사용할 수 있습니다. 존재하는 경우 내장 브라우저 방법을 사용합니다. 이전 Internet Explorer 버전의 경우와 같이없는 경우 고유 한 사용자 지정 방법을 사용합니다.
웹 사이트에서 배열에서 요소를 제거하는 간단한 예 :
_.without([1, 2, 1, 0, 3, 1, 4], 0, 1); // => [2, 3, 4]
ES6을 사용할 수 있습니다. 예를 들어이 경우 값 '3'을 삭제하려면 다음을 수행하십시오.
var array=['1','2','3','4','5','6']
var newArray = array.filter((value)=>value!='3');
console.log(newArray);
출력 :
["1", "2", "4", "5", "6"]
이 코드를 확인하십시오. 모든 주요 브라우저 에서 작동 합니다 .
remove_item = function (arr, value) {
var b = '';
for (b in arr) {
if (arr[b] === value) {
arr.splice(b, 1);
break;
}
}
return arr;
}
이 함수를 호출
remove_item(array,value);
for in
과 루프에서 결과를 직접 반환하여 스크립트가 더 일찍 중지 될 수 있다는 사실을 제외하고 . upvotes는 합리적이다;)
for( i = 0; i < arr.length; i++ )
브라우저가 항목을 저장하기로 결정한 순서에 관계없이 정확한 색인을 유지하므로 더 나은 접근 방법이 될 yckart의 의견을 반복해야합니다 for in
. 그렇게하면 필요한 경우 값의 배열 인덱스를 얻을 수 있습니다.
lodash _.pull (돌연변이 배열), _.pullAt (돌연변이 배열) 또는 _.without ( 돌연변이하지 않음 )을 사용할 수 있습니다 .
var array1 = ['a', 'b', 'c', 'd']
_.pull(array1, 'c')
console.log(array1) // ['a', 'b', 'd']
var array2 = ['e', 'f', 'g', 'h']
_.pullAt(array2, 0)
console.log(array2) // ['f', 'g', 'h']
var array3 = ['i', 'j', 'k', 'l']
var newArray = _.without(array3, 'i') // ['j', 'k', 'l']
console.log(array3) // ['i', 'j', 'k', 'l']
ES6 & 돌연변이 없음 : (2016 년 10 월)
const removeByIndex = (list, index) =>
[
...list.slice(0, index),
...list.slice(index + 1)
];
output = removeByIndex([33,22,11,44],1) //=> [33,11,44]
console.log(output)
filter
않습니까? array.filter((_, index) => index !== removedIndex);
.
배열에서 특정 요소 / 문자열을 제거하는 것은 하나의 라이너로 수행 할 수 있습니다.
theArray.splice(theArray.indexOf("stringToRemoveFromArray"), 1);
어디:
theArray : 특정 항목을 제거하려는 배열
stringToRemoveFromArray : 제거하려는 문자열이고 1은 제거하려는 요소의 양입니다.
참고 : "stringToRemoveFromArray"가 배열에 없으면 배열의 마지막 요소가 제거됩니다.
요소를 제거하기 전에 먼저 배열에 요소가 있는지 확인하는 것이 좋습니다.
if (theArray.indexOf("stringToRemoveFromArray") >= 0){
theArray.splice(theArray.indexOf("stringToRemoveFromArray"), 1);
}
클라이언트 컴퓨터에서 최신 Ecmascript 버전에 액세스 할 수있는 경우 (경고, 이전 스테이션에서는 작동하지 않을 수 있음) :
var array=['1','2','3','4','5','6']
var newArray = array.filter((value)=>value!='3');
여기서 '3'은 배열에서 제거하려는 값입니다. 그러면 배열은 다음과 같습니다.['1','2','4','5','6']
"stringToRemoveFromArray"
당신의 배열에 있지,이 배열의 마지막 요소를 제거합니다.
JavaScript를 사용하여 배열에서 항목 을 제거하는 몇 가지 방법이 있습니다. 있습니다.
설명 된 모든 메소드 는 원래 배열을 변경하지 않고 대신 새 배열 을 작성합니다.
배열이 있고 position에서 항목을 제거하려고한다고 가정하십시오 i
.
한 가지 방법은 다음을 사용하는 것입니다 slice()
.
const items = ['a', 'b', 'c', 'd', 'e', 'f']
const i = 3
const filteredItems = items.slice(0, i).concat(items.slice(i+1, items.length))
console.log(filteredItems)
slice()
수신 한 색인으로 새 배열을 작성합니다. 우리는 단순히 시작에서 제거하고자하는 인덱스에 이르기까지 새로운 배열을 생성하고, 우리가 제거한 배열 다음에 배열의 끝까지 다른 배열을 연결합니다.
이 경우 하나의 좋은 옵션을 사용 filter()
하는 것이보다 선언 적인 접근 방식 을 제공합니다 .
const items = ['a', 'b', 'c', 'd', 'e', 'f']
const valueToRemove = 'c'
const filteredItems = items.filter(item => item !== valueToRemove)
console.log(filteredItems)
ES6 화살표 기능을 사용합니다. 기존 기능을 사용하여 이전 브라우저를 지원할 수 있습니다.
const items = ['a', 'b', 'c', 'd', 'e', 'f']
const valueToRemove = 'c'
const filteredItems = items.filter(function(item) {
return item !== valueToRemove
})
console.log(filteredItems)
또는 Babel을 사용하여 ES6 코드를 ES5로 다시 변환하여 이전 브라우저에서보다 소화하기 쉽게 만들 수 있지만 코드에서 최신 JavaScript를 작성할 수 있습니다.
단일 항목 대신 많은 항목을 제거하려면 어떻게합니까?
가장 간단한 해결책을 찾으십시오.
함수를 만들고 항목을 연속으로 제거 할 수 있습니다.
const items = ['a', 'b', 'c', 'd', 'e', 'f']
const removeItem = (items, i) =>
items.slice(0, i-1).concat(items.slice(i, items.length))
let filteredItems = removeItem(items, 3)
filteredItems = removeItem(filteredItems, 5)
//["a", "b", "c", "d"]
console.log(filteredItems)
콜백 함수 내에 포함을 검색 할 수 있습니다.
const items = ['a', 'b', 'c', 'd', 'e', 'f']
const valuesToRemove = ['c', 'd']
const filteredItems = items.filter(item => !valuesToRemove.includes(item))
// ["a", "b", "e", "f"]
console.log(filteredItems)
splice()
(와 혼동하지 말 것 slice()
)은 원래 배열을 변경하므로 피해야합니다.
(원래 https://flaviocopes.com/how-to-remove-item-from-array/에 게시 )
OK, 예를 들어, 당신은 배열 아래에 있습니다 :
var num = [1, 2, 3, 4, 5];
그리고 우리는 숫자 4를 삭제하고 싶습니다. 아래 코드를 사용하면됩니다.
num.splice(num.indexOf(4), 1); // num will be [1, 2, 3, 5];
이 함수를 재사용하는 경우 재사용 가능한 함수를 작성하면 아래와 같이 기본 배열 함수에 첨부 됩니다.
Array.prototype.remove = Array.prototype.remove || function(x) {
const i = this.indexOf(x);
if(i===-1)
return;
this.splice(i, 1); // num.remove(5) === [1, 2, 3];
}
그러나 배열에 몇 개의 [5]로 대신 아래 배열이 있다면 어떨까요?
var num = [5, 6, 5, 4, 5, 1, 5];
모두 확인하려면 루프가 필요하지만 더 쉽고 효율적인 방법은 내장 JavaScript 함수를 사용하는 것이므로 대신 아래와 같은 필터를 사용하는 함수를 작성하십시오.
const _removeValue = (arr, x) => arr.filter(n => n!==x);
//_removeValue([1, 2, 3, 4, 5, 5, 6, 5], 5) // Return [1, 2, 3, 4, 6]
Lodash 또는 Underscore와 같이이를 수행하는 데 도움이되는 타사 라이브러리도 있습니다. 자세한 정보는 lodash _.pull, _.pullAt 또는 _.without을 참조하십시오.
this.splice(num.indexOf(x), 1);
=>this.splice(this.indexOf(x), 1);
저는 JavaScript를 처음 접했고이 기능이 필요했습니다. 나는 단지 이것을 썼다 :
function removeFromArray(array, item, index) {
while((index = array.indexOf(item)) > -1) {
array.splice(index, 1);
}
}
그런 다음 사용하고 싶을 때 :
//Set-up some dummy data
var dummyObj = {name:"meow"};
var dummyArray = [dummyObj, "item1", "item1", "item2"];
//Remove the dummy data
removeFromArray(dummyArray, dummyObj);
removeFromArray(dummyArray, "item2");
출력-예상대로. [ "item1", "item1"]
본인과 다른 요구가있을 수 있으므로 필요에 따라 쉽게 수정할 수 있습니다. 나는 이것이 누군가를 돕기를 바랍니다.
배열에 복잡한 객체가 있다면 필터를 사용할 수 있습니까? $ .inArray 또는 array.splice가 사용하기 쉽지 않은 상황. 특히 객체가 배열에서 얕을 경우.
예를 들어 ID 필드가있는 객체가 있고 객체를 배열에서 제거하려는 경우 :
this.array = this.array.filter(function(element, i) {
return element.id !== idToRemove;
});
ECMAScript 6을 기반으로 답변하고 싶습니다 . 아래와 같은 배열이 있다고 가정하십시오.
let arr = [1,2,3,4];
와 같은 특수 색인에서 삭제하려면 2
아래 코드를 작성하십시오.
arr.splice(2, 1); //=> arr became [1,2,4]
그러나 같은 특수 항목을 삭제 3
하고 색인을 모르는 경우 다음과 같이하십시오.
arr = arr.filter(e => e !== 3); //=> arr became [1,2,4]
힌트 : 빈 배열이 없으면 필터 콜백에 화살표 함수를 사용하십시오.
업데이트 : 이 방법은 ECMAScript 2015 (이전의 ES6)를 사용할 수없는 경우에만 권장됩니다. 그것을 사용할 수 있다면, 여기에 다른 답변이 훨씬 깔끔한 구현을 제공합니다.
이 요점 은 문제를 해결하고 1 또는 지정된 값 대신 인수의 모든 발생을 삭제합니다.
Array.prototype.destroy = function(obj){
// Return null if no objects were found and removed
var destroyed = null;
for(var i = 0; i < this.length; i++){
// Use while-loop to find adjacent equal objects
while(this[i] === obj){
// Remove this[i] and store it within destroyed
destroyed = this.splice(i, 1)[0];
}
}
return destroyed;
}
용법:
var x = [1, 2, 3, 3, true, false, undefined, false];
x.destroy(3); // => 3
x.destroy(false); // => false
x; // => [1, 2, true, undefined]
x.destroy(true); // => true
x.destroy(undefined); // => undefined
x; // => [1, 2]
x.destroy(3); // => null
x; // => [1, 2]
오늘 (2019-12-09) 저는 선택한 솔루션에 대해 macOS v10.13.6 (High Sierra)에서 성능 테스트를 수행합니다. delete
(A)를 표시 하지만 배열에 빈 공간이 남아 있기 때문에 다른 방법과 비교하여 사용하지 않습니다.
결론
array.splice
(C)입니다 (두 번째 어레이가있는 소형 어레이의 경우 Safari 제외).array.slice+splice
(H)는 Firefox 및 Safari에서 가장 빠른 불변 솔루션입니다. Array.from
(B)는 Chrome에서 가장 빠릅니다.테스트에서 다른 방법으로 배열에서 중간 요소를 제거합니다. A, C의 솔루션에-장소입니다. B, D, E, F, G, H 솔루션을 변경할 수있다.
요소가 10 개인 배열의 결과
Chrome에서 array.splice
(C)는 가장 빠른 인플레 이스 솔루션입니다. array.filter
(D)는 불변 빠른 해결책이다. 가장 느린 것은 array.slice
(F)입니다. 여기 에서 컴퓨터 에서 테스트를 수행 할 수 있습니다 .
요소가 1.000.000 인 배열의 결과
Chrome에서 array.splice
(C)는 가장 빠른 인플레 이스 솔루션입니다 ( delete
(C)는 빠르지 만 어레이에 빈 슬롯이 남아 있으므로 '완전 제거'를 수행하지 않습니다). array.slice-splice
(H)는 불변 빠른 해결책이다. 가장 느린 것은 array.filter
(D와 E)입니다. 여기 에서 컴퓨터 에서 테스트를 수행 할 수 있습니다 .
브라우저 비교 : Chrome v78.0.0, Safari v13.0.4 및 Firefox v71.0.0
배열을 변경해서는 안됩니다. 이것은 기능적 프로그래밍 패턴에 위배됩니다. ECMAScript 6 방법을 사용하여 데이터를 변경하려는 어레이를 참조하지 않고 새 어레이를 생성 할 수 있습니다 filter
.
var myArray = [1, 2, 3, 4, 5, 6];
5
배열에서 제거하고 싶다고 가정하면 다음과 같이 간단하게 수행 할 수 있습니다.
myArray = myArray.filter(value => value !== 5);
제거하려는 값이없는 새 배열이 제공됩니다. 결과는 다음과 같습니다.
[1, 2, 3, 4, 6]; // 5 has been removed from this array
자세한 내용은 Array.filter 에서 MDN 설명서를 참조하십시오 .
보다 현대적인 ECMAScript 2015 (이전 명칭 Harmony 또는 ES 6) 접근 방식. 주어진:
const items = [1, 2, 3, 4];
const index = 2;
그때:
items.filter((x, i) => i !== index);
굽힐 수 있는:
[1, 2, 4]
Babel 및 polyfill 서비스 를 사용하여 브라우저에서이를 완벽하게 지원할 수 있습니다 .
.filter
동일한 배열에서 요소를 제거하는 것과 정확히 동일하지 않은 새 배열 을 반환합니다. 이 방법의 장점은 배열 방법을 함께 연결할 수 있다는 것입니다. 예 :[1,2,3].filter(n => n%2).map(n => n*n) === [ 1, 9 ]
splice
또는 을 사용하고 싶을 것입니다 slice
.
items= items.filter(x=>x!=3)
. 또한 OP는 대규모 데이터 세트에 대한 요구 사항을 명시하지 않았습니다.
배열에 1-9가 있고 5를 제거하려고합니다. 아래 코드를 사용하십시오.
var numberArray = [1, 2, 3, 4, 5, 6, 7, 8, 9];
var newNumberArray = numberArray.filter(m => {
return m !== 5;
});
console.log("new Array, 5 removed", newNumberArray);
여러 값을 원할 경우 예 :-1,7,8
var numberArray = [1, 2, 3, 4, 5, 6, 7, 8, 9];
var newNumberArray = numberArray.filter(m => {
return (m !== 1) && (m !== 7) && (m !== 8);
});
console.log("new Array, 1,7 and 8 removed", newNumberArray);
배열에서 배열 값을 제거하려는 경우. 예 : [3,4,5]
var numberArray = [1, 2, 3, 4, 5, 6, 7, 8, 9];
var removebleArray = [3,4,5];
var newNumberArray = numberArray.filter(m => {
return !removebleArray.includes(m);
});
console.log("new Array, [3,4,5] removed", newNumberArray);
지원되는 브라우저는 link 입니다.
나는 이미 많은 답변이 있지만 많은 사람들이 문제를 지나치게 복잡하게하는 것으로 알고 있습니다. 다음은 키의 모든 인스턴스를 제거하는 간단하고 재귀적인 방법입니다. 인덱스를 찾을 수 없을 때까지 자체 호출합니다. 예,는 브라우저에서만 작동 indexOf
하지만 간단하고 쉽게 채울 수 있습니다.
독립형 기능
function removeAll(array, key){
var index = array.indexOf(key);
if(index === -1) return;
array.splice(index, 1);
removeAll(array,key);
}
프로토 타입 방법
Array.prototype.removeAll = function(key){
var index = this.indexOf(key);
if(index === -1) return;
this.splice(index, 1);
this.removeAll(key);
}
요소의 인스턴스가 여러 개인 경우 역방향 루프를 수행하여 인덱스를 망치지 않도록 할 수 있습니다.
var myElement = "chocolate";
var myArray = ['chocolate', 'poptart', 'poptart', 'poptart', 'chocolate', 'poptart', 'poptart', 'chocolate'];
/* Important code */
for (var i = myArray.length - 1; i >= 0; i--) {
if (myArray[i] == myElement) myArray.splice(i, 1);
}