IT Share you

배열을 반복하고 JavaScript에서 요소를 제거하는 방법

shareyou 2020. 11. 9. 21:34
반응형

배열을 반복하고 JavaScript에서 요소를 제거하는 방법


이 질문에 이미 답변이 있습니다.

요소 배열이 있으며 여기에서 특정 요소를 제거해야합니다. 문제는 자바 스크립트에 for 각 루프가없는 것 같고 for 루프를 사용하면 기본적으로 배열 경계를 넘는 요소를 확인하려고 시도하거나 인덱스가 변경되어 배열의 요소가 누락되어 문제가 발생합니다. . 제가 의미하는 바를 보여 드리겠습니다.

var elements = [1, 5, 5, 3, 5, 2, 4];
for(var i = 0; i < elements.length; i++){
    if(elements[i] == 5){
        elements.splice(i, 1);
    }
}

문제는 요소 [1]이 제거되면 요소 [2]가 요소 [1]이된다는 것입니다. 따라서 첫 번째 문제는 일부 요소가 검사되지 않는다는 것입니다. 다른 문제는 .length가 변경되고 경계를 하드 코딩하면 배열 경계를 넘어서는 요소를 검사하려고 할 수 있다는 것입니다. 그래서이 믿을 수 없을만큼 간단한 일을하는 가장 좋은 방법은 무엇일까요?


위에서부터 시작하세요!

var elements = [1, 5, 5, 3, 5, 2, 4];
for(var i = elements.length -1; i >= 0 ; i--){
    if(elements[i] == 5){
        elements.splice(i, 1);
    }
}

filter여기 에서 방법을 사용할 수 있습니다 .

var elements = [1, 5, 5, 3, 5, 2, 4].filter(function(a){return a !== 5;});
//=> elements now [1,3,2,4]

또는 만지고 싶지 않은 경우 elements:

var elementsfiltered
   ,elements = [1, 5, 5, 3, 5, 2, 4]
                .filter( function(a){if (a!==5) this.push(a); return true;},
                         elementsfiltered = [] );
   //=> elementsfiltered = [1,3,2,4], elements = [1, 5, 5, 3, 5, 2, 4]

MDN 문서참조하십시오.filter

또는 확장 할 수 있습니다 Array.prototype

Array.prototype.remove = Array.prototype.remove || function(val){
    var i = this.length;
    while(i--){
        if (this[i] === val){
            this.splice(i,1);
        }
    }
};
var elements = [1, 5, 5, 3, 5, 2, 4];
elements.remove(5);
//=> elements now [1,3,2,4]

var elements = [1, 5, 5, 3, 5, 2, 4];    
var i = elements.length;
while (i--) {
    if (elements[i] == 5) {
        elements.splice(i, 1);
    }
}
console.log(elements);


사용 ) (Array.shift를 :

var array = [1, 2, 3, 'a', 'b', 'c'];
while (array.length > 0) {
  console.log(array.shift());
}

편집 : 아마도 사양에 맞지 않을 것입니다. 나는 질문을 잘못 읽었고 ( 특정 요소 만 제거 ) 아직 언급되지 않은 방법을 추가하는 대신 너무 열망했습니다 ...


You could simply decrement i whenever you remove an item.

var elements = [1, 5, 5, 3, 5, 2, 4];

var l = elements.length;
for(var i = 0; i < l; i++){
    if(elements[i] == 5){
        elements.splice(i, 1);
        i--;
    }
}

console.log(elements);


This is an example of using Array.indexOf, while and Array.splice to remove elements inline.

var elements = [1, 5, 5, 3, 5, 2, 4];
var remove = 5;
var index = elements.indexOf(remove);

while (index !== -1) {
    elements.splice(index, 1);
    index = elements.indexOf(remove);
}

console.log(elements);

On jsfiddle

참고URL : https://stackoverflow.com/questions/16352546/how-to-iterate-over-an-array-and-remove-elements-in-javascript

반응형