簡體   English   中英

Array.prototype.filter 自動過濾掉falsey值

[英]Array.prototype.filter automatically filtering out falsey value

filter 函數是否會自動過濾掉 false、null 或 undefined 等虛假值? 如果是這樣,如何阻止它這樣做。

我需要過濾掉數組中的所有 0,所以我使用了 array.filter 回調,我意識到過濾器函數會刪除假值,即使我想保留它們。 有沒有解決的辦法?

編輯:這是我擁有的代碼,並且進行深度比較並沒有返回 falsey 值。

function removeZero(arr) {
  return arr.filter(function(element){
    if(element!==0){
      return element;
    }
  });
}

編輯 2:這是包含測試數組內容的 repl.it 鏈接,當我運行它時,結果會過濾掉 false、null 和 undefined。 https://repl.it/BAiK

使用!==運算符

[1,2,3,0,[],{},false,undefined].filter(function(e){return e !== 0})
// Output: [1, 2, 3, Array[0], Object, false, undefined]

!=運算符的輸出進行比較(您不想使用)

[1,2,3,0,[],{},false,undefined].filter(function(e){return e != 0})
// Output: [1, 2, 3, Object, undefined]

這是您提供的代碼https://repl.it/BAiK

var removeZeros = function (arr) {
  return arr.filter(function(element){
    if(element!==0){
      return element; // here is the error, you need to return a boolean. (true to add element to final array, false to ignore element)
    }
  });
}

console.log(removeZeros([false, 1, 2, 3, null, 0, 4, undefined, 5, 0]));
// Output: [ 1, 2, 3, 4, 5 ]

你看,過濾器函數的返回值需要是一個布爾值,而不是你想要返回的元素。 當您返回 false 時,該元素不會添加到最終數組中,當您返回 true 時,將返回正在處理的元素。 查看我的編輯並修復了您的代碼

這是你的代碼固定

var removeZeros = function (arr) {
  return arr.filter(function(element){
    return element !== 0 // this returns a boolean
  });
}

console.log(removeZeros([false, 1, 2, 3, null, 0, 4, undefined, 5, 0]));
// Output: [ false, 1, 2, 3, null, 4, undefined, 5 ]

 var result = [1, 2, 3, 0, false, undefined, null, -1].filter( function (e) { return e !== 0; }); document.getElementById('out').innerHTML = result.reduce(function (r, a) { return r + '\\n ' + a + ' [' + (typeof a) + ']'; }, '[') + '\\n]';
 <pre id="out"></pre>

您的示例不返回 true,而是返回值本身,這是被評估的。 如果返回值為真,則 Array.filter Array.filter()包含元素。

function removeZero(arr) {
    return arr.filter(function(element) {
        if (element !== 0){
            return element; // <-- falsy values are not true.
        }
    });
}

只是

[1,2,3,0,[],{},false,undefined].filter(Boolean)  // return [1, 2, 3, [], {}]

這里Boolean是一個函數,當所有的falsy value進來時,它會返回false

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM