2016-04-08 4 views
-1

Я не знаю, почему этот возврат не определен?целочисленная пустая переменная javascript

var array = [6, 4, 6, 9]; 
var min; 
var findminimum = function(){ 
     array.reduce(function(prev, cur, index, array) { 
        if (cur < min) { 
         min = cur; 
        } 
     }, 0); 
     return min; 
    }; 
console.log(findminimum()); 

но когда я установил:

var min = 20; 

он запускается нормально, так что кто-нибудь может объяснить мне, как правильно определить переменную Num?

+3

Если 'cur

+1

Если' min' не установлен, 'cur

+0

вы правы, спасибо :) – meks

ответ

0

Вам необходимо присвоить значение мин в противном случае вы не сможете проверить свою ценность

if (typeof min == "undefined" || cur < min) { 
    min = cur; 
} 
0

Проблема заключается в том, что из-за min не инициализируется значением является undefined. Поэтому ваше сравнение if (cur < min) никогда не является истинным, а min по-прежнему не определено. Кроме того, если вы собираетесь использовать reduce() для этого вместо простого цикла, вы можете использовать его по-разному, вот пример кода, который работает:

var array = [6, 4, 6, 9, 1, -99]; 
var min = 9999; 
var findminimum = function() { 
    // you could return the final output of reduce()... 
    return array.reduce(function (prev, cur, index, array) { 
     if (cur < min) { 
      min = cur; 
     } 

     return min; // ...then this return statement would be here inside the reduce callback 
    }, 0); 
}; 
console.log(findminimum()); 
1

На самом деле undefined в Javascript означает, что этот переменный еще не определена, и это именно то, что происходит в вашем случае:

Вы используете переменную min перед присвоением ей значения, так:

if (cur < min) 

будет всегда возвращать false, s o нет значения, присвоенного min, и min = cur; никогда не будет достигнуто, и ваша функция вернет undefined.

EDIT:

Если вы только писать var min; вы просто объявить переменную min для того, чтобы использовать его, вы должны инициализировать его, присвоив ему значение, в вашем случае, вы должны написать:

var min = 0; 

Теперь min будет иметь значение 0, то вы можете сравнить его с другими переменными.

+0

Основная проблема заключается в том, что он использует свободные переменные внутри 'findminimum' – rand

+0

Да, и переменная' min' должна быть объявлена ​​внутри 'findminimum'. –

0

Ваша основная проблема в том, что вы используете переменную из ouside уменьшения min для хранения минимума массива. Array#reduce() - это способ получения одного результата из итерации с возможным заданным начальным значением.

Проблемы (порядка в обратном порядке):

  • reduce(..., 0) начать с 0. не имеет смысла, потому что это может быть как минимум, или значение, которое слишком мало, как и в массиве [6, 4, 6, 9].

  • лучше не принимать initialValue, потому что если не initialValue не дается, чем уменьшить занимает первые два элемента для prev и cur. Если массив имеет только один элемент, то этот элемент возвращается.

  • Сокращенная форма требуемого снижения:

    min = array.reduce(function (prev, cur) { 
        return cur < prev ? cur : prev; 
    }); 
    

Теперь вы можете положить его в функцию минимума и принять массив в качестве параметра:

function getMinimum(array) { 
 
    return array.reduce(function (prev, cur) { 
 
     return cur < prev ? cur : prev; 
 
    }); 
 
} 
 

 
document.write(getMinimum([6, 4, 6, 9]) + '<br>'); 
 
document.write(getMinimum([6, 4]) + '<br>'); 
 
document.write(getMinimum([42]) + '<br>');

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