需要从数组中删除最高和最低的数字,并将剩余的数字相加。 (重复的值可以保留,例如[2、2、3、5、8]仅将2删除一次。)
创建2个单独的最小值和最大值,然后从数组总数中减去它们。
当数组为空时还应该返回0吗?
通过了几次测试,但看不到为什么不通过上述所有指定条件?
redis
答案 0 :(得分:3)
好吧,一方面,如果您需要此检查:
if(array === null){
return 0;}
...使用array
之前之前需要它。
此外,您不应首先在min
中包含max
和sum
值。您不能只减去它们-毕竟,一个值可能会在数组中多次出现 。 (例如,您的代码对[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()
还将分别返回-Infinity
和Infinity
,它们的总和是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([]))