当所有元素都相同时,
条件
element !== array[array.length - 1]
对于所有元素都将为false,因为所有元素都与最后一个相同。
因此
filter(...)
将是一个空数组,
所以你得到了你得到的错误。
事实上,这种实现有很大的缺陷。
最好与
index
而不是元素值:
function main(arr) {
const count = 4;
const sorted = arr.sort((a, b) => a - b);
const sum = (accumulator, currentValue) => accumulator + currentValue;
const min = sorted
.filter((element, index) => index < count)
.reduce(sum);
const max = sorted
.filter((element, index) => index >= arr.length - count)
.reduce(sum);
console.log(min, max);
}
main([1, 2, 3, 4, 5]);
main([5, 5, 5, 5, 5]);
我还加入了其他一些改进:
-
使数组成为函数的参数,以便于测试
-
不要对数组进行两次排序,一次就足够了
-
像
@Andrew
在评论中指出,
arr.sort()
如果不能正确排序整数,则需要向其传递一个比较器函数以获得预期效果
-
减少重复逻辑:提取
sum
功能和
count
-
用内联lambda表达式替换代码块