JavaScript array.some()函数不工作,因为它应该?

问题描述:

我正在做一个使用AngularJS的Web项目,但在我试图实现array.prototype.some()函数的控制检查之一。不幸的是,它不起作用,并且总是假的。JavaScript array.some()函数不工作,因为它应该?

以我在发现错误尝试,我试图执行其中具有数字的阵列用于检查值高于5

测试代码一个简单的测试情况下是这样的:

var arrayForTesting = [2, 5, 18]; 

var result = arrayForTesting.some(function (element, index, array){ 
    element > 5; 
}); 

一些网页意味着我需要索引和数组作为强制参数,但只有元素是我需要的这个测试的唯一参数。

然而,结果仍然为假,但有至少一个大于5

什么我做错了更高的元素是什么?

+1

'element> 5'评估谓词,但不返回其结果。 'return'语句在这里会有所帮助。 –

你不是返回结果element > 5比较;也许你已经看到了ES2015的“箭头函数”,并且正在将它们简洁的语法与function函数语法混淆起来(或者你可能已经看过一些CoffeeScript)。

当使用function语法,必须返回结果:

var arrayForTesting = [2, 5, 18]; 
var result = arrayForTesting.some(function (element, index, array){ 
    return element > 5; 
// ^^^^^^ 
}); 

如果函数退出没有return xyz语句(或不带操作数使用return;),调用函数的结果是undefined,这是错误的,所以some不会停止循环。

有了ES2015,如果你用一个箭头功能和“简洁的函数体”的回报是隐:

var arrayForTesting = [2, 5, 18]; 
var result = arrayForTesting.some(element => element > 5); 

但是,只有以简洁机构(无{}),否则你用returnfunction功能:

var arrayForTesting = [2, 5, 18]; 
var result = arrayForTesting.some(element => { 
    return element > 5; 
}); 

注意的是,虽然前沿的浏览器都在积极更新自己的JavaScript引擎添加ES2015的特性,在地面上支撑依然稀疏的话,你可能需要transpile使用ES2015具有箭头功能。 (尤其是,如果您需要支持IE10等旧浏览器。)

+1

当然,我必须做出这样的疏忽......呃! 谢谢 –