【发布时间】:2015-03-03 21:40:08
【问题描述】:
我编写了一个函数,它采用plevel(整数)和slevel(数字字符串数组)并找到plevel 和slevel 中的值之间的最小差异。但是,当我运行脚本时,它没有响应,并且调试器说 diff 未定义。
var findDiff = function findDiff(plevel, slevel) {
var diff = new Array();
for (i=0; i<=slevel.length; i++) {
sleveli = parseInt(slevel[i]);
diff.push(Math.abs(plevel-sleveli));
}
if (diff.length > 1){
diff.sort(function(a, b){return a-b});
return diff[0]
}
else{
return diff[0];
}
}
函数在这里被调用:
var matches = new Array();
var newFetch = Data.find().fetch();
for(i = 0; i <= newFetch.length; i++ ){
pointsMatch = 0
var difference = findDiff(newFetch[i].level, spec.level);
pointsMatch -= (difference*3);
matches.push([newFetch[i], pointsMatch])
}
console.log(matches)
Data 是一个 mongoDB 集合。 spec.level 是一个数字字符串数组,作为属性存储在对象中。
【问题讨论】:
-
你能举个例子来说明你是如何调用这个函数的吗?
-
顺便说一句,这个索引不是超出范围吗?
i<=slevel.length -
@OmriAharon
parseInt(string)如果字符串是有效的数字字符串,则不会返回NaN。 -
@Omri Aharon 如果您所做的只是像他在这里所做的那样称呼它,那么没有任何好处。但这是编码风格的问题。 OP 显然认为最好的做法是命名所有函数并将它们分配给变量,这样您就不需要跟踪何时执行以及何时不执行。不是每个人都同意,但这可能永远不会达成普遍共识,就像是否要评论而不是在单元测试中记录所有内容一样。
-
还记得变量提升...
var foo = function foo()是一个命名函数表达式,而function foo是一个函数语句。后者被吊起,前者没有。一个 Duff 是正确的,命名函数表达式与匿名函数表达式相比对调试很有用。 developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
标签: javascript arrays function