Javascript에서 배열에서 빈 요소 제거

JavaScript 배열에서 빈 요소를 제거하려면 어떻게 해야 합니까?

간단한 방법이 있습니까?아니면 루프를 반복하여 수동으로 제거해야 합니까?



질문에 대한 답변



몇 가지 간단한 방법:

var arr = [1,2,,3,,-3,null,,0,,undefined,4,,4,,5,,6,,,,];
arr.filter(n => n) // [1, 2, 3, -3, 4, 4, 5, 6]
arr.filter(Number)
// [1, 2, 3, -3, 4, 4, 5, 6]
arr.filter(Boolean)
// [1, 2, 3, -3, 4, 4, 5, 6] 

또는 – (“텍스트” 유형의 단일 배열 항목만 해당)

['','1','2',3,,'4',,undefined,,,'5'].join('').split('');
// output:
["1","2","3","4","5"] 

또는 – 기존 방식: 단순 반복

var arr = [1,2,null, undefined,3,,3,,,0,,,[],,{},,5,,6,,,,],
len = arr.length, i;
for(i = 0; i < len; i++ )
arr[i] && arr.push(arr[i]);
// copy non-empty values to the end of the array
arr.splice(0 , len);
// cut the array and leave only the non-empty values // [1,2,3,3,[],Object{},5,6] 

j쿼리:

var arr = [1,2,,3,,3,,,0,,,4,,4,,5,,6,,,,];
arr = $.grep(arr, n => n == 0
n); // [1, 2, 3, 3, 0, 4, 4, 5, 6] 



편집: 이 질문은 거의 9년 전에 답변되었습니다.그때, 이 질문에 대한 답변은 도움이 되는 임베디드 메서드가 거의 없었습니다.Array.prototype.

이제, 확실히, 저는 당신에게 이 기능을 사용할 것을 권합니다.filter방법.

이 메서드는 제공하는 콜백 함수의 기준을 충족하는 요소를 포함하는 새 어레이를 반환합니다.

예를 들어 제거하려는 경우null또는undefined값:

var array = [0, 1, null, 2, "", 3, undefined, 3,,,,,, 4,, 4,, 5,, 6,,,,];
var filtered = array.filter(function (el) {
return el != null; });
console.log(filtered);

예를 들어 문자열을 취급하는 경우 위의 함수는 빈 문자열인 요소를 제거하지 않습니다.

자주 사용되는 패턴 중 하나는 빈 스트링을 포함한 가짜 요소를 제거하는 것입니다."",0,NaN,null,undefined,그리고.false.

에 패스할 수 있습니다.filter메서드,Boolean생성자 함수 또는 필터 기준 함수에서 동일한 요소를 반환합니다. 예를 들어 다음과 같습니다.

var filtered = array.filter(Boolean); 

또는

var filtered = array.filter(function(el) { return el; }); 

어느 쪽이든, 이것은 동작합니다.filter첫 번째 경우 메서드,Boolean값을 변환하는 함수로서의 생성자, 그리고 두 번째 경우,filtermethod는 콜백의 반환값을 암묵적으로 에 반환합니다.Boolean.

스파스 어레이를 사용하여 “구멍”을 제거하려는 경우filtertrue를 반환하는 콜백을 전달하는 메서드.다음은 예를 제시하겠습니다.

var sparseArray = [0, , , 1, , , , , 2, , , , 3],
cleanArray = sparseArray.filter(function () { return true });
console.log(cleanArray); // [ 0, 1, 2, 3 ]

오래된 답변:이러지 마!

이 방법을 사용하여 네이티브 어레이 프로토타입을 확장합니다.

Array.prototype.clean = function(deleteValue) {
for (var i = 0; i < this.length; i++) {
if (this[i] == deleteValue) {

this.splice(i, 1);
i--;
}
}
return this; };
test = new Array("", "One", "Two", "", "Three", "", "Four").clean(""); test2 = [1, 2,, 3,, 3,,,,,, 4,, 4,, 5,, 6,,,,]; test2.clean(undefined); 

또는 기존 요소를 다른 배열로 푸시할 수도 있습니다.

// Will remove all falsy values: undefined, null, 0, false, NaN and "" (empty string) function cleanArray(actual) {
var newArray = new Array();
for (var i = 0; i < actual.length; i++) {
if (actual[i]) {
newArray.push(actual[i]);
}
}
return newArray; }
cleanArray([1, 2,, 3,, 3,,,,,, 4,, 4,, 5,, 6,,,,]); 



모든 빈 값(“), null, defined 및 0)을 제거해야 하는 경우:

arr = arr.filter(function(e){return e});

빈 값과 줄 바꿈을 제거하려면:

arr = arr.filter(function(e){ return e.replace(/(rn n r)/gm,"")}); 

예:

arr = ["hello",0,"",null,undefined,1,100," "]
arr.filter(function(e){return e}); 

반품:

["hello", 1, 100, " "] 

UPDATE (Alnitak의 코멘트에 근거)

경우에 따라 어레이에 “0”을 유지하고 다른 항목(null, undefined 및 “)을 삭제할 수 있습니다.이 방법은 다음과 같습니다.

arr.filter(function(e){ return e === 0
e }); 

반품:

["hello", 0, 1, 100, " "] 



라이너 1개만:

[1, false, "", undefined, 2].filter(Boolean); // [1, 2] 

또는 underscorejs.org 를 사용합니다.

_.filter([1, false, "", undefined, 2], Boolean); // [1, 2] // or even: _.compact([1, false, "", undefined, 2]); // [1, 2] 



Javascript 1.6 이후를 사용하고 있는 경우, 간단한 사용법을 사용할 수 있습니다.return true콜백 함수. 예:

arr = arr.filter(function() { return true; }); 

부터.filter는 원래 배열에서 누락된 요소를 자동으로 건너뜁니다.

위에 링크된 MDN 페이지에는 다음 버전의 오류 체크도 포함되어 있습니다.filter정식 버전을 지원하지 않는 JavaScript 인터프리터에서 사용할 수 있습니다.

이렇게 해도 제거되지 않습니다.null엔트리와 명시적인 엔트리가 있습니다.undefinedOP가 특별히 “누락된” 엔트리를 요청했습니다.