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

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

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

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

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

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

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

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

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

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



답변

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"]

화살표 함수 문서


답변

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


답변

참고 :
문서 내용 :

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;
  };
}


답변

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

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


답변

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];


답변

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

    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);


답변

lodash의 방법을 사용할 수 있으며 문자열, 숫자 및 부울 유형에 대해 작동합니다.

_.compact([0, 1, false, 2, '', 3]);
// => [1, 2, 3]

https://lodash.com/docs/4.17.15#compact