我无法完成Codewar上最简单的kata之一。 想了解我在哪里错了!
指令:对数组的所有数字求和,除最高和 最低的元素(值,而不是索引!)。 (最高/最低 元素在每个边缘处分别只是一个元素,即使存在 多个具有相同值!)如果数组为空,则为null或 无,或者如果仅存在1个元素,则返回0。
function sumArray(array) {
var finalSum = 0;
if (array != null || !array) {
for (var i = 0; i < array.length; i++) {
finalSum += array[i];
}
if (array.length === 0 || array.length <= 1) {
return 0;
} else {
return finalSum - Math.max(...array) - Math.min(...array);
}
}
}
一切似乎都不错,应该可以,但是它没有通过最终测试。
TypeError:无法读取null的属性“ length”
我尝试在第一个if typeof array != 'null', typeof array != 'undefined'
中添加,但没有帮助...
答案 0 :(得分:0)
if(typeof array !== "undefined" && typeof array !== "null" )
您可以尝试一下。
答案 1 :(得分:0)
这样检查。
if(array && array.length) {
for (var i = 0; i < array.length; i++) {
finalSum += array[i];
}
if (array.length === 0 || array.length <= 1) {
return 0;
} else {
return finalSum - Math.max(...array) - Math.min(...array);
}
}
答案 2 :(得分:0)
在Javascript中,null的typeof返回将是一个对象。这就是为什么您的第一个if不起作用的原因。您检查它是否不等于null以及它是否为true,因为返回将是object。在ECMAScript null处了解更多信息。
对此有更多证明,请拔出控制台并输入以下内容。
a = null
typeof array // will return "object"
a != null // will return false, even if we attributed the value of a to null.
a !== null // will false also
a == null // will return true, so let's use this !
我假设您遇到的错误是测试为sumArray(null)或sumArray()时。为了正确返回0,您必须执行此操作。
function sumArray(array) {
var finalSum = 0;
if (array == null)
return 0;
if (array != null || !array) {
for (var i = 0; i < array.length; i++) {
finalSum += array[i];
}
if (array.length === 0 || array.length <= 1) {
return 0;
} else {
return finalSum - Math.max(...array) - Math.min(...array);
}
}
}
出于某些奇怪的原因,使用array == null
将返回正确的返回值(如果数组为null,则为true)。 (关于原因,我还没有读懂。)