2015-10-16 68 views
1

我正在做一個使用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'語句在這裏會有所幫助。 –

回答

6

你不是返回結果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

當然,我必須做出這樣的疏忽......呃! 謝謝 –

相關問題