2015-10-16 4 views
1

Я делаю веб-проект, используя AngularJS, но в одной из контрольных проверок я пытаюсь реализовать функцию 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); 

Но только с краткими органами (без {}), в противном случае вы используете return, как с function функции:

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

Обратите внимание, что в то время как передовые браузеры активно обновляют свои двигатели JavaScript, чтобы добавлять новые функции ES2015, поддержка на местах по-прежнему скудны достаточно, то вы, вероятно, нужно transpile использовать ES2015 имеет функции стрелок. (Не в последнюю очередь, если вам нужно поддерживать старые браузеры, такие как IE10.)

+1

Конечно, я должен был сделать такой надзор ... Ух! Спасибо –

Смежные вопросы