Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无最高和最低数字的和数组_Javascript_Arrays - Fatal编程技术网

Javascript 无最高和最低数字的和数组

Javascript 无最高和最低数字的和数组,javascript,arrays,Javascript,Arrays,我正在尝试解决这个任务(将数组中的所有数字相加(在F#和Haskell中,你会得到一个列表),除了最高和最低的元素(值,而不是索引!)。 (最高/最低元素在每条边上仅为一个元素,即使有多个元素具有相同的值!)) 这是我的代码,但我得到了NaN 函数数组(数组){ var和; array.sort(函数(a,b){ 返回a-b }); 对于(var i=1;i

我正在尝试解决这个任务(将数组中的所有数字相加(在F#和Haskell中,你会得到一个列表),除了最高和最低的元素(值,而不是索引!)。 (最高/最低元素在每条边上仅为一个元素,即使有多个元素具有相同的值!))

这是我的代码,但我得到了NaN

函数数组(数组){
var和;
array.sort(函数(a,b){
返回a-b
});
对于(var i=1;i
  • 初始化总和=0
  • 将回路移动到回路外部
  • 循环直到<代码>{ 返回[ 数学最小值(当前值,累加器[0]), 数学最大值(当前值,累加器[1]) ]; },[Number.MAX\u值,Number.MIN\u值] ) 求和=arr.reduce(函数(a,b){ 返回a+b; }, 0); // 添加 总和-=(最小值[0]+最小值[1]); console.log(sum)一些问题:

    • sum
      需要一个初始值,即0
    • 在循环中返回
      ,因此循环只能执行一次迭代。。。曾经在循环之后移动它
    • 您不是对一进行求和,而是对最后一个(有序)值进行求和。使用
      i
    • 您的算法依赖于
      排序
      ,这使得它的时间复杂度为O(nlogn)。如果使用
      Math.min
      Math.max
      ,则可以在O(n)中执行此操作:
    函数数组(数组){
    返回数组长度<2?0
    :array.reduce((a,b)=>a+b)-Math.min(…array)-Math.max(…array);
    }
    console.log(
    sumArray([6,2,1,8,10])
    
    )
    您对空数组的期望是什么?或者一个数组中只有一个值,因为它将同时是最高值和最低值。
    var sum=0
    可能有助于将返回移动到循环外部
    array.length-2
    应该是
    array.length-1
    。但这是ES5+。我认为这有点超出了OP的范围,而且根本就没有运行browsers@mplungjan她没有指定需要更正代码,她概述了任务,并要求解决方案。尽管如此:
    但是,如果数组中的元素太多,spread(…)和apply都将失败或返回错误的结果,因为他们试图将数组元素作为函数参数传递。
    我不知道你为什么一直对数组排序。从集合中找出最大值和最小值不需要它。我可以使用Math.max/min,但它与另一个相同answer@nicodp-我添加了一个在大型阵列上不会失败的无排序版本更新为添加一个版本,其中最小最大值只有一个reduce