programing

배열에서 모든 거짓 값 제거

goodcopy 2021. 1. 16. 10:37
반응형

배열에서 모든 거짓 값 제거


배열에서 모든 거짓 값을 제거하고 싶습니다. JavaScript의 거짓 값은 false, null, 0, "", 정의되지 않음 및 NaN입니다.

function bouncer(arr) {
 arr = arr.filter(function (n) { 
    return (n !== undefined && n !== null && n !== false && n !== 0 && n !== "" && isNaN()!=NaN); });
  return arr;
}

bouncer([7, "ate", "", false, 9, NaN], "");

위는 NaN 테스트 케이스를 제외하고 모두 만족하고 있습니다. 누군가가 어레이에 NaN이 포함되어 있는지 확인하는 데 도움을 줄 수 있습니까?


부울을 사용할 수 있습니다.

var myFilterArray = myArray.filter(Boolean);

"거짓"값을 없애고 싶기 때문에 JavaScript가 그 일을하도록하십시오.

function bouncer(arr) {
  return arr.filter(function(v) { return !!v; });
}

!연산자를 이중으로 적용 true하면 값이 "truthy"이고 "false"일 때 필터 콜백이 반환 됩니다 false.

(귀하의 코드는 호출 isNaN()하지만 값을 전달하지 않습니다. 이것이 그 테스트가 작동하지 않는 이유입니다. isNaN()함수는 true숫자로 강제 변환 될 때 매개 변수가 NaN이고 false그렇지 않으면 반환합니다.)

편집 — 참고

function bouncer(arr) {
  return arr.filter(Boolean);
}

내장 된 부울 생성자가 .NET과 거의 똑같은 일을하기 때문에 LoremIpsum이 다른 답변에서 메모하는 것처럼 작동 !!합니다.


truthyArray = arr.filter(el => el)

^ 그것이 당신이하는 방법입니다


당신이 사용하는 isNaN()잘못된 방법으로. 다음과 같아야합니다.

function bouncer(arr) {
   return arr.filter(function (n) { 
       return n !== undefined && n !== null && n !== false && n !== 0 && n !== "" && !isNaN(n); 
   });

}

또한 다시 작성할 수 있습니다.

function bouncer( arr ){
    return arr.filter( function( value ){
        return value;
    });
}

arr.filter () 메서드를 사용하여이 작업을 수행 할 수 있다는 것을 알고 있습니다. 하지만 저는 Boolean () 함수를 사용하는 것을 선호합니다. 나에게 더 명확합니다. 조금 더 길지만 다음은 내가 한 방법입니다.

function bouncer(arr) {
// Don't show a false ID to this bouncer.

    var falsy;
    var trueArr = [];

    for (i = 0; i < arr.length; i++) {

        falsy =  Boolean(arr[i]);

        if (falsy === true) {

        trueArr.push(arr[i]);

        }

    }

    return trueArr;
}

bouncer([7, "ate", "", false, 9]);
// returns a new array that is filtered accordingly.

이것은 또 다른 동등하지만 예시적인 솔루션입니다.

function bouncer( arr ){
    return arr.filter( function( value ){
        return value ? true : false;
    });
}

이 코드 샘플은 변수 value가 진실 또는 거짓으로 평가되고 익명 함수가 의 평가에 매핑 되는 부울 ( true또는)을 반환 할 것임을 독자에게 나타 내기 때문에 예시 false입니다 value.

진실성을 기반으로 배열에서 값을 제거하는 이러한 접근 방식에 익숙하지 않은 사람 또는 filter함수 에 익숙하지 않은 (또는 설명서를 읽지 않은) 사람 에게이 예제는 여전히 가장 간결한 것입니다. filter기능 동작.

물론 응용 프로그램에서 더 간결하지만 통찰력이 떨어지는 구현을 선택할 수 있습니다.

function bouncer( arr ){
    return arr.filter( function( value ){
        return value;
    });
}

필터를 사용하여 작성할 수 있습니다.

function bouncer(arr) {
 return arr.filter(item => item);
}
bouncer([false, null, 0, NaN, undefined, ""]) // will return [].

이 간단한 필터를 사용하면 다음을 수행 할 수 있습니다.

array.filter(Boolean)

여기 에 대한 자세한 내용을 읽을 수 있습니다.Boolean


이런 식으로 더 나은 거래를 생각합니다

   function bouncer(arr) {
        arr = arr.filter(function(item) {
            return item;
        return arr;

    bouncer([7, "ate", "", false, 9, NaN, undefined, 0]);

경비원 기능 :

function bouncer(arr) {
  return arr.filter((val) => {
    return !!val;
  });
}

console.log(bouncer([7, "ate", "", false, 9]));


위의 모든 작업 답변에 감사드립니다. 문제를 해결하기위한 3 가지 방법이 있습니다. 세 번째 솔루션은 @Vignesh 접근 방식으로 문제를 해결했습니다.

1. 
function bouncer(arr) {
  return arr.filter( function( val ){
        return val;
    });
}

2. 
function bouncer(arr) {
return arr.filter(Boolean);
}
3.
  function bouncer(arr) {
  return arr.filter(function(val){
      return val !== false && val !== "" && !(Number.isNaN(val)) && val !== 
undefined && val !== 0 && val !== null;
    });
 }

이건 내 생각이야 ...

function bouncer(arr) {
  // Don't show a false ID to this bouncer.
  var result = [];
  
    function isGood(obj){
      if(!Boolean(obj)){
        return false;
      } else {
        return true;
      }
    }
    
    for (var i=0; i < arr.length; i++){
      if (isGood(arr[i]) === true){
        result.push(arr[i]);
      }
    }
  return result;
}

console.log(bouncer([7, "ate", "", false, 9]));


function bouncer(arr) {  
  var result = []; 
   for (var i = 0; i < arr.length; i++) {
     if (arr[i]) {
      result.push(arr[i]);
     }
   }
  return result;
 }

 bouncer([7, "ate", "", false, 9]);

function falsy(value) {
      if (value) {
        return value;
      }
    }

    function bouncer(arr) {
      var filter = arr.filter(falsy);
      return filter;
    }

    bouncer([7, "ate", "", false, 9]);

function removeFalsy(value){

  var val = Boolean(value);
  if(!val)
    return false;
  return true;
}

function bouncer(arr) {

  return arr.filter(removeFalsy);
}

bouncer([7, "ate", "", false, 9]);

function bouncer(arr) {

    function filterFalse(value) {
        var a = Boolean(value);
        if (a === true) {
            return a;
        }
        return a;
    }

    function filterArray(x) {
        var y = filterFalse(x);
        if (y) {
            return true;
        } else {
            return false;
        }
    }

    var newArr = arr.filter(filterArray);
    return newArr;
}

bouncer([1, null, NaN, 2, undefined]);

이것은 당신이 찾고있는 것이어야합니다 :

let array = [7, 'ate', '', false, 9, NaN];

function removeFalsyItems(array) {
   // Your result
   let filter = array.filter(Boolean);

   // Empty the array
   array.splice(0, array.length);

   // Push all items from the result to our array
   Array.prototype.push.apply(array, filter);

   return array
}

removeFalsyItems(array) // => [7, 'ate', 9], funny joke btw...

lodash는 트릭을 훌륭하게 수행 할 수 있으며 _.compact () 함수가 있습니다.

const arr = [7, "ate", "", false, 9, NaN];
console.log(_.compact(arr));
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.js"></script>


필터와 부울을 사용해보십시오.

let array = [7,"ate","",false,9];
array.filter((values) => {return Boolean(values) === true })

부울로 "캐스트"하려면 두 번 부정하면됩니다. !NaN === true=>!!NaN === false

    const truthy = arr.filter(o => !!o)

function bouncer(arr) {

// Don't show a false ID to this bouncer.

for (var i = 0; i < arr.length; i++) {
        if (!arr[i]) {
            arr.splice(i, 1);
            i = i-1;
        }
    }
    return arr;

}

bouncer([7, "ate", "", false, 9]);

참조 URL : https://stackoverflow.com/questions/32906887/remove-all-falsy-values-from-an-array

반응형