使用Math.max和Math.min从数组中删除最高和最低数字

时间:2019-07-13 14:43:26

标签: javascript arrays

需要从数组中删除最高和最低的数字,并将剩余的数字相加。 (重复的值可以保留,例如[2、2、3、5、8]仅将2删除一次。)

创建2个单独的最小值和最大值,然后从数组总数中减去它们。

当数组为空时还应该返回0吗?

通过了几次测试,但看不到为什么不通过上述所有指定条件?

redis

5 个答案:

答案 0 :(得分:3)

好吧,一方面,如果您需要此检查:

if(array === null){
return 0;}

...使用array 之前之前需要它。

此外,您不应首先在min中包含maxsum值。您不能只减去它们-毕竟,一个值可能会在数组中多次出现 。 (例如,您的代码对[2, 2, 3, 4, 5]的计算结果将是错误的,因为它对2进行两次计数,但只对其进行一次减法。)因此,不要在事后减去它们,也不要首先将它们添加到循环中。

答案 1 :(得分:0)

我想,我不应该显示这个吗?

(因为这里有太多人可以做同样的回答)

function sumArray(array)
{
  if (array === null) return 0
  
  let sum = array.reduce((a,c)=>a+c) // sum array values
    , min = Math.min(...array)      // lowest in array by spreading
    , max = Math.max(...array)     // highest in array by spreading

  console.log({sum,min,max})

  return (sum - max - min)
}


console.log('sumArray',sumArray([2, 2, 3, 4, 5]))

答案 2 :(得分:0)

Reduce是一种将数组求和的简单方法

function sumArray(array) {
  // Nothing to do so we retrun zero
  if(!Array.isArray(array) || array.length == 0) return 0;
  
  var min = Math.min(...array);  // lowest in array by spreading
  var max = Math.max(...array);  // highest in array by spreading

  // Sum up the numbers in the array
  var sum = array.reduce((acc, val) => acc + val, 0);

  // Do the math
  return sum - max - min;
}

console.log(sumArray([2, 2, 3, 5, 8]))
console.log(sumArray())
console.log(sumArray([]))
console.log(sumArray([0]))
console.log(sumArray([null, 0, 12]))
console.log(sumArray([null]))

答案 3 :(得分:0)

我猜想如果数组的长度为1,则您的代码不符合条件。然后只能删除一个值,其余值之和为0,但实际上您是在减去它两次。

对于空数组,max()min()还将分别返回-InfinityInfinity,它们的总和是NaN而不是{ {1}}。您的0检查不会测试空数组(=== null[].length),而是测试不存在的数组。

为了解决这些问题,我会写

0

如果您的函数也应该使用非数组值,例如function sumArray(array) { if (array.length <= 2) return 0; const min = Math.min(...array); const max = Math.max(...array); const sum = array.reduce((a,b) => a+b, 0); return sum - max - min; } 并为它们返回null,请添加第二个检查:

0

答案 4 :(得分:0)

您可以对数组进行排序并删除第一个和最后一个值,而不必分别标识最大和最小值。

您还可以将null包装在数组中,以避免在执行流程中创建特殊情况:

const sumArray = arr =>
  (arr || Array.of(arr))
	.sort((a, b) => a - b)
	.slice(1, (arr && (arr.length - 1)))
	.reduce((sum, n) => sum + n, 0)

console.log(sumArray([2, 2, 3, 5, 8]))
console.log(sumArray(null))
console.log(sumArray([]))