Javascript array.some()函数不能正常工作吗?

Dar*_*ous 1 javascript arrays

我正在使用AngularJS进行一个Web项目,但在其中一个控件检查中,我正在尝试实现array.prototype.some() - 函数.不幸的是,它不起作用,总是假的.

在我尝试找到错误时,我尝试实现一个简单的测试用例,其中检查具有数字的数组的值是否大于5.

测试代码是这样的:

var arrayForTesting = [2, 5, 18];

var result = arrayForTesting.some(function (element, index, array){
    element > 5;
});
Run Code Online (Sandbox Code Playgroud)

一些网页暗示我需要索引和数组作为必需参数,但只有元素是我测试所需的唯一参数.

但是,结果仍然是假的,但至少有一个元素高于5.

我究竟做错了什么?

T.J*_*der 9

你没有返回element > 5比较的结果; 也许你已经看过ES2015"箭头函数",并且他们的简洁语法与function函数语法相混淆(或者你可能已经看过一些CoffeeScript).

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

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

如果函数在没有return xyz语句的情况下退出(或者return;在没有操作数的情况下使用),则调用函数的结果undefined是假的,因此some不会停止循环.

使用ES2015,如果使用箭头函数和"简洁函数体",则返回隐含:

var arrayForTesting = [2, 5, 18];
var result = arrayForTesting.some(element => element > 5);
Run Code Online (Sandbox Code Playgroud)

但只有简洁的机构(否{}),否则你使用returnfunction函数一样:

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

请注意,虽然尖端浏览器正在积极更新其JavaScript引擎以添加ES2015功能,但实际支持仍然很少,您可能需要转换为使用箭头功能等ES2015功能.(尤其是如果您需要支持IE10等旧版浏览器.)