我正在尝试解决任务(对数组的所有数字求和(在 F# 和 Haskell 中你得到一个列表)除了最高和最低元素(值,而不是索引!)。 (最高/最低元素在每条边上分别只有一个元素,即使有多个元素具有相同的值!))
这是我的代码,但我得到的是 NaN
function sumArray(array) {
var sum;
array.sort(function(a, b) {
return a - b
});
for (var i = 1; i < array.length - 2; i++) {
return sum += array[i];
}
}
console.log(
sumArray([6, 2, 1, 8, 10])
)
最佳答案
一些问题:
-
sum
需要一个初始值,即 0 - 你
return
在 循环中,因此循环只能进行一次迭代,...永远。在循环之后移动它 - 您不是在对一个值求和,而是对最后一个(排序的)值求和。使用
i < array.length - 1
- 您的算法依赖于
sort
这使它的时间复杂度为 O(nlogn)。如果您使用Math.min
,您可以在 O(n) 中完成此操作和Math.max
:
function sumArray(array) {
return array.length < 2 ? 0
: array.reduce((a, b) => a + b) - Math.min(...array) - Math.max(...array);
}
console.log(
sumArray([6, 2, 1, 8, 10])
)
注意:这是所有主流浏览器都支持的 ES6 代码,IE 是一个明显的异常(exception)。
对于旧版浏览器:
function sumArray(array) {
return array.length < 2 ? 0
: array.reduce(function (a, b) {
return a + b;
}) - Math.min.apply(null, array) - Math.max.apply(null, array);
}
console.log(
sumArray([])
)
对于非常大的数组,可能需要通过 reduce
获取最小值和最大值因为可以传递给函数调用的参数数量是有限的。
关于javascript - 没有最高和最低数字js的总和数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48842559/