루프없이 레코드를 유지하면서 배열에서 빈 문자열을 제거 하시겠습니까?


90

이 질문은 여기에 질문되었습니다 : 비어 있지 않은 문자열로 인덱스 기록을 유지하면서 배열에서 빈 문자열 제거

@Baz가 배치 한 것처럼 주어진 것을 알 수 있다면;

"I", "am", "", "still", "here", "", "man"

"그리고 이로부터 다음 두 개의 배열을 만들고 싶습니다."

"I", "am", "still", "here", "man"

이 질문에 대한 모든 답변 은 반복 형식을 참조했습니다.

내 질문 : 루핑없이 모든 es 를 제거 할 수 있습니까? ... 배열을 반복하는 것 외에 다른 대안이 있습니까?indexempty string

우리가 알지 못하는 일부 regex또는 jQuery일부일 수 있습니까?

모든 답변이나 제안을 높이 평가합니다.

답변:


325
var arr = ["I", "am", "", "still", "here", "", "man"]
// arr = ["I", "am", "", "still", "here", "", "man"]
arr = arr.filter(Boolean)
// arr = ["I", "am", "still", "here", "man"]

filter 선적 서류 비치


// arr = ["I", "am", "", "still", "here", "", "man"]
arr = arr.filter(v=>v!='');
// arr = ["I", "am", "still", "here", "man"]

화살표 함수 문서


3
나는 당신이 어떻게 느끼는지 정확히 알고 있고, 몇 달 전에 사용했고, 아주 많은 작은 문제들을
Isaac

14
여전히 IE8을 실행하는 @DiegoPlentz 사람들은 배열에서 공백을 제거하는 것보다 훨씬 더 많은 문제를 겪을 것입니다. 요즘에는 그 브라우저를 지원하는 것을 거의 고려하지 않았습니다
Isaac

이에 가장 가까운 array.filter(!!): 현재 우리가 얻을 수
james_womack

2
이 답변에 대한 모든 크레딧은 stackoverflow.com/questions/16701319/
Isaac

에 대한 설명 Boolean이 좋을 것입니다.
robsch

18
var newArray = oldArray.filter(function(v){return v!==''});

쉽게 최고의 답변입니다. 질문이 요구하는대로 정확히 수행합니다. 0 값을 제거하지 않습니다.
Bryan

9

참고 : 문서 내용 :

filterECMA-262 표준에 대한 JavaScript 확장입니다. 같은 이것은 표준의 다른 실시 예에 존재하지 않을 수있다 . 스크립트 시작 부분에 다음 코드를 삽입하여 기본적으로 지원하지 않는 ECMA-262 구현에서 필터 사용을 허용하여이 문제를 해결할 수 있습니다. 이 알고리즘은 fn.call이 Function.prototype.call의 원래 값으로 평가되고 Array.prototype.push에 원래 값이 있다고 가정 할 때 ECMA-262, 5th edition에 지정된 것과 정확히 일치합니다.

그래서, 일부 상심을 피하기 위해, 당신은 당신의 스크립트 코드를 추가 할 수 있습니다 처음에는 .

if (!Array.prototype.filter) {
  Array.prototype.filter = function (fn, context) {
    var i,
        value,
        result = [],
        length;
        if (!this || typeof fn !== 'function' || (fn instanceof RegExp)) {
          throw new TypeError();
        }
        length = this.length;
        for (i = 0; i < length; i++) {
          if (this.hasOwnProperty(i)) {
            value = this[i];
            if (fn.call(context, value, i, this)) {
              result.push(value);
            }
          }
        }
    return result;
  };
}

3
arr = arr.filter(v => v);

반환 된대로 v암시는 진실로 변환


2

jQuery를 사용하는 경우 grep 이 유용 할 수 있습니다.


var arr = [ a, b, c, , e, f, , g, h ];

arr = jQuery.grep(arr, function(n){ return (n); });

arr 지금 [ a, b, c, d, e, f, g];


2
JQuery와는 천한 작업에 대한 부피의 많은 것 같아
이삭

0

즉, 아래와 같이 쉼표, 공백 또는 줄 바꿈으로 구분 된 여러 이메일 주소를 가져와야합니다.

    var emails = EmailText.replace(","," ").replace("\n"," ").replace(" ","").split(" ");
    for(var i in emails)
        emails[i] = emails[i].replace(/(\r\n|\n|\r)/gm,"");

    emails.filter(Boolean);
    console.log(emails);

.replace(" ","").split(" ")"모든 공백을 아무것도없는 것으로 바꾸고 모든 공간에서 분할 해보십시오."
Isaac

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.