배열을 반복하고 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
'IT Share you' 카테고리의 다른 글
| 암호화 보안 난수 생성기는 어떻게 작동합니까? (0) | 2020.11.09 |
|---|---|
| Android 창이 란 무엇입니까? (0) | 2020.11.09 |
| wget을 사용하여 설치된 Docker를 제거하는 방법은 무엇입니까? (0) | 2020.11.09 |
| 푸시하면 개인 이메일 주소 오류가 게시됩니다. (0) | 2020.11.09 |
| 빌드 설정은 UUID로 프로비저닝 프로파일을 지정합니다. (0) | 2020.11.09 |