2017-02-24 52 views
-1

我正在通過FreeCodeCamp「Falsy Bouncer」挑戰。我必須從數組中刪除所有的falsy值。我已經知道最簡單的解決方案是過濾布爾值,但我想知道是否有可能通過這種方式解決問題。在作爲函數參數傳遞的數組上使用array.filter()方法

我在不同的網站上查找了arr.filter()方法,但在這些例子中,帶有數組的變量出現在函數之前。在我的情況下,我必須操作的數組作爲函數的參數。所以我不太明白我把這條線放在哪裏:var result = arr.filter(bouncer)。如果超出該功能 - 則返回arr is not defined。如果進入該功能,則返回 - arr.filter is not a function

這是我的代碼:

function bouncer(arr) { 
    // Where do I put this line? 
    var result = arr.filter(bouncer); 
    return arr !== false, null, 0, NaN, undefined,""; 
    } 

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

因此,如何在array.filter()如果陣列被給定爲一個函數的自變量使用的方法?

+1

參數*只是變量。 'var result = arr.filter(bouncer);'是接近的,但你不應該通過'bouncer'函數來過濾,你正在創建一個永遠不會完成的遞歸循環。 – Brennan

+0

你想保持''吃了嗎? '在結果數組中,還是隻想保留數字? –

+0

是的,我想保持「吃」。我只需要過濾掉falsy元素:false,null,0,「」,undefined和NaN。 –

回答

1

您使用的方法錯誤,而且您無法檢查以逗號分隔的多個事物。

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

 
var result = bouncer([7, "ate", "", false, 9, NaN]); 
 
console.log(result);
:做你想要將

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

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

+0

這不正確@Andreas,isNaN檢查不會被覆蓋,「吃」會留在陣列中。但我同意你可以將它簡化爲我在答案中編輯的內容 – baao

+1

爲什麼要刪除「吃」? 「比較」部分中的值都是[falsy值](https://developer.mozilla.org/de/docs/Glossary/Falsy)。除非'NaN'部分沒有進一步的定義,否則我沒有看到'isNaN()'檢查的原因,因此可以使用伊布林解決方案。 – Andreas

+0

@Andreas在閱讀挑戰的描述之後,我承認你是對的。 – baao

1

如果你想bouncer是您用來返回過濾陣列功能,然後用這個東西的正確方法

如果你想要bouncer是要傳遞給filter回調,然後使用此:

function bouncer(elem) { 
 
    return !!elem; 
 
} 
 

 
var result = [7, "ate", "", false, 9, NaN].filter(bouncer); 
 
console.log(result);

注:!!someVariable將隱式轉換someVariable成等效的布爾值。

+0

你的過濾器允許NaN的 – baao

+0

@baao不,它不! –

+0

單擊運行代碼片段,查看結果數組中的「吃」。那只是NaN而已? – baao