2016-11-22 92 views
0

我对如何使用lodash _.some()函数检查集合(对象)有点困惑。使用lodash验证集合的正确类型

var x = {prop1: 800, prop2: 800, prop3: 'test'}; 

_.some(x, i => _.isNaN(i)) 
//false 

_.some(x, _.isNaN) 
//false 
+0

什么问题? – Eddi

+0

我建议,这两个some-fn的结果是真实的,因为prop3是一个字符串 – Zantinger

+0

这是不正确的。 '_.isNaN(“string”)'将返回false,因为它不是'NaN'。试着在控制台中运行这个语句,你会看到这个。 – Eddi

回答

0

既然你想知道,如果所有属性都是数字,您可以使用此:

!_.some(x, i=> !_.isNumber(i)) 

我不知道关于_.some_.every的perforamance差异,但你当然也可以使用:

_.every(x, i=> _.isNumber(i)) 
0

_.isNaN('test')返回false。这是一个string

_.isString('test')是你在找什么。

_.some(x, (i) => { 
    console.log(_.isString(i)); 
}); 

// false 
// false 
// true 

编辑:刚刚看到您的评论。如果要检查每一个值是一个数字,你可以这样做:

_.every(x, (i) => { 
    console.log(i); 
    return _.isNumber(i); 
}) 

//false 
0

从lodash DOC _.isNaN是基于Number.isNaN,与全局isNaN不同,它对未定义的值和其他非数字值返回true。

_.some(x, isNaN) 
//true