2017-07-07 158 views
2

我想確保一個數組包含多於一個元素,並且它不是空的也不是未定義的。換句話說:我正在尋找替代檢查一個JavaScript數組是否包含多個元素...與lodash?

if(array && array.length > 1) 

這將是更好的閱讀。

Lodash提供了用於檢查方法,如果陣列包含至少一個元件:

if(_.some(array)) 

是否有用於檢查若干元件類似的方法?

不幸的是下面的方法不存在:

if(_.several(array)) 

if(_.many(array)) 

我會寫我自己的擴展方法還是我只是沒有找到合適的lodash命令,沒有?

+3

我'array.length> 1'是一個很大的可讀性然後'_.some(陣列)' –

+1

看起來你是在這裏得太多。 '_.some'不是爲了你提到的目的。它更強大。爲了你的目的,編寫一個包含'array.length> 1'的函數已經足夠了。 –

+0

@Stoyan _.some(array)將和數組&& array.length> 0進行比較。我從左到右閱讀,當看到「some」並看到參數時,我已經知道條件是關於什麼的。否則,我需要繼續「長度」,然後我必須檢查長度後面是什麼:<, > ===,... – Stefan

回答

1

您可以爲自己創建lodash混入:

var myArray = [1, 2, 3]; 
var anotherArray = [4]; 

function several(array) { 
    return _.get(array, 'length') > 1 
} 

_.mixin({ 'several': several }); 

console.log(_.several(myArray)) // ==> true 
console.log(_.several(anotherArray)) // ==> false 

例子:https://jsfiddle.net/ecq7ddey/

2
_.compact(array).length > 1 

緊湊型返回falsey值被移除的數組(false,null,0,「」,undefined和NaN)。

1

這是atLeast()功能,其工作方式_.some(),但接受分鐘數。如果回調返回true的次數與min相同,則該函數將返回true

// the parameters order is to maintain compatability with lodash. A more functional order would be - cb, min, arr 
 
function atLeast(arr, min, cb) { 
 
    cb = cb || _.identity; // default is like some 
 
    
 
    var counter = 0; 
 
    return _.some(arr, function(v) { 
 
    cb(v) && counter++; 
 
    
 
    return counter === min; 
 
    }); 
 
} 
 

 
_.mixin({ 'atLeast': atLeast }); 
 

 
var arr1 = [1, 0, null, undefined]; 
 
var arr2 = [null, undefined, 0]; 
 

 
var isNotNil = _.negate(_.isNil); // not null or undefined 
 

 
console.log(_.atLeast(arr1, 2, isNotNil)); 
 

 
console.log(_.atLeast(arr2, 2, isNotNil));
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>

相關問題