2017-07-07 95 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>

相关问题