2014-09-04 4 views
0

У меня есть быстрый вопрос о том, почему моя функция возвращает false, когда я ожидаю, что она вернется. Я просмотрел документацию для Array.prototype.every, и я все еще не могу ее найти. Заранее благодарны за Вашу помощь.Почему функция «каждый» Javascript возвращает false?

В каком-то контексте это часть вопроса coderbyte, называемого arithGeo. Текущая функция, над которой я сейчас работаю, должна возвращать true, если разница между каждым элементом одинакова. Здесь я ожидаю, что это вернет true, поскольку каждый элемент равен 5 от следующего.

Здесь моя функция

var arr = [5, 10, 15]; 
function isArith(arr){ 
    var diff = arr[1] - arr[0]; 
    return arr.every(function(val, ind, col){ 
     // if statement checks to make sure I stay in bounds. 
     if(col[ind + 1] !== undefined){ 
     var next = col[ind + 1] - val; 
     console.log(diff === next ); 
     // logging shows the following statement to be true, for every iteration 
     return diff === next; 
     } 
    }); 
} 


var arith = isArith(arr); 
console.log('arith: ', arith) // logs false 
+1

Лучшим тестом может быть 'if (ind RobG

+0

Нет, мне не нужно размещать разреженные массивы. Я думаю, что ваше предложение более ясное, чем 'col [ind + 1]! == undefined'. Будут реализованы, спасибо. –

ответ

3

На последней итерации вы будете возвращать undefined, который будет интерпретировано как false. Код делает это, потому что если if не работает (что он делает на последнем элементе), нет инструкции return. Если вы добавите return true в конец после if, он должен работать.

+0

Если какое-либо промежуточное значение не определено * undefined * или массив разрежен. – RobG

2

Когда вы достигаете последнего элемента, вы проверяете, есть ли следующий элемент, чтобы вы не сравнивали последний элемент с ничем. Замечательно. Но в этом случае вы забудете return что угодно, а по умолчанию return - undefined, что является ложным. Просто введите else return true.

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