【问题标题】:Finding mode and median in Javascript error在 Javascript 错误中查找模式和中位数
【发布时间】:2014-10-01 04:24:02
【问题描述】:

过去两天我一直在研究一个 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

【问题讨论】:

    标签: mode median


    【解决方案1】:

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

    从您为median 赋值的行中删除var。在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]));
    

    【讨论】:

    • 为什么我不能在定义众数和中位数时在函数内不使用var。我认为这会在全球范围内定义它?
    • 不,它不会全局定义它。它将为该功能定义它。如果它不在函数内,它只会全局定义它。
    猜你喜欢
    • 2014-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-03
    • 2018-10-18
    • 1970-01-01
    相关资源
    最近更新 更多