在Javascript错误中查找模式和中位数

时间:2014-10-01 04:24:03

标签: mode median

过去两天我一直在研究coderbyte问题。我以为我最后因某种原因购买了它,我一直都会收到错误。

function comparemedianandmode(arr){

    function findmode(arr){
        mapping = {};
        mode = 0;
        for(var i = 0; i < arr.length; i++){
            if(!mapping[arr[i]]){
                mapping[arr[i]] = 0; 
            }
            mapping[arr[i]] += 1;
        }    
        for(prop in mapping){
            if(mapping[prop] > mode){
               var mode = parseInt(prop);
            }
        } 

    }

    function findmedian(arr){
        arr.sort(function(a,b){return a - b});
        if(arr.length % 2 === 0){
            var median = (arr[(arr.length/2)-1] + arr[arr.length/2])/2;
        }
        else{
            var median = arr[(arr.length - 1)/2];
        }

    }
    var answer = (median === mode) ? 1 : 0;
return answer
    }

当我尝试comparemedianandmode([1,2,3,3,3,4,5])时,我收到以下错误:

ReferenceError: median is not defined

必须是简单的事情,但我似乎无法弄清楚

编辑

New Code:
function comparemedianandmode(arr){
var mode;
var median;


function findmode(arr){
    mapping = {};

    for(var i = 0; i < arr.length; i++){
        if(!mapping[arr[i]]){
            mapping[arr[i]] = 0; 
        }
        mapping[arr[i]] += 1;
    }    
    for(prop in mapping){
        if(mapping[prop] > mode){
           var mode = parseInt(prop);
        }
    } 

}
var median 
function findmedian(arr){
    var median
    arr.sort(function(a,b){return a - b});
    if(arr.length % 2 === 0){
        median = (arr[(arr.length/2)-1] + arr[arr.length/2])/2;
    }
    else{
        median = arr[(arr.length - 1)/2];
    }
}
var answer = (median === mode) ? 1 : 0;
return answer
}

comparemedianandmode([1,2,3,3,3,4,5])

=> 1

1 个答案:

答案 0 :(得分:2)

使用var声明变量会将其范围限制为声明它的函数。您在median内声明findmedian(),但随后尝试在为median分配值的行中访问该函数之外的answer

从您为var分配值的行中删除median。在comparemedianandmode()(您的最外面的函数)的顶部,声明median

var median;

你在一个函数中有一个函数,那个内部函数是你声明median的地方,但是你试图在这行内部函数之外使用它:

var answer = (median === mode) ? 1 : 0;

顺便说一句,您必须对mode执行相同操作。

以下是这之后的样子:

function comparemedianandmode(arr){

    var median;
    var mode;

    function findmode(arr){
        mapping = {};
        mode = 0;
        for(var i = 0; i < arr.length; i++){
            if(!mapping[arr[i]]){
                mapping[arr[i]] = 0; 
            }
            mapping[arr[i]] += 1;
        }    
        for(prop in mapping){
            if(mapping[prop] > mode){
                mode = parseInt(prop);
            }
        } 
    }

    function findmedian(arr){
        arr.sort(function(a,b){return a - b});
        if(arr.length % 2 === 0){
            median = (arr[(arr.length/2)-1] + arr[arr.length/2])/2;
        } else {
            median = arr[(arr.length - 1)/2];
        }
    }

    answer = (median === mode) ? 1 : 0;
    return answer;
}

console.log(comparemedianandmode([1,2,3,3,3,4,5]));