过去两天我一直在研究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
答案 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]));