javascript - 没有最高和最低数字js的总和数组

标签 javascript arrays

我正在尝试解决任务(对数组的所有数字求和(在 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/

相关文章:

javascript - Bootstrap 下拉列表在我切换页面后停止工作 - Rails 4.2

javascript - Bootstrap 3 - 最大化窗口时导航对齐未正确显示

c - 函数返回后,函数中分配的内存是否仍保持分配状态?

c - 参数中的数组没有变量初始化

javascript - 在 JavaScript 中,var a=5 有什么区别。变量 a=5?

javascript - 在不弄乱 UTF-8 字符串的情况下获取子字符串

javascript - 使用javascript在html Canvas 上绘制蝴蝶图

ios - 我想将每个单元格链接到不同的 URL

javascript - 将对象数组映射到另一个对象数组中

arrays - 如何使用 bash 将数组的所有元素打印到文件中