这是我的代码!
如何使用map((,filter((或yred((
之类的方法替换loop =>算法
const sumAll = (arr) => {
let sum = 0
if (arr[0] > arr[1]) [arr[0], arr[1]] = [arr[1], arr[0]]
for( let i = arr[0]; i <= arr[1] ; i ++) sum += i
// replace for loop
return sum
}
console.log(sumAll([1, 4]));
console.log(sumAll([10, 5]));
您可以使用三角形数字的高斯总和公式,其中从 1
到 n
的所有数字都像 n * (n + 1) / 2
。然后,您需要减去所有先前发现的1
... n - 1
的总和。
+---- 10 ---+ +------- 45 --------+ | | | | 1 2 3 4 5 6 7 8 9 10 | | +------ 15 -----+ | | +---------------- 55 ---------------+
function sumAll(array) {
var min = Math.min(...array),
max = Math.max(...array);
return max * (max + 1) / 2 - (min - 1) * min / 2;
}
console.log(sumAll([1, 4]));
console.log(sumAll([10, 5]));
用减少来创建临时数组。
function sumAll(array) {
var min = Math.min(...array),
max = Math.max(...array),
array = Array.from({ length: max - min + 1 }, (_, i) => min + i);
return array.reduce((a, b) => a + b);
}
console.log(sumAll([1, 4]));
console.log(sumAll([10, 5]));
您可以使用Array.apply()
和map()
,然后使用reduce()
。
const sumAll = (arr) => {
if (arr[0] > arr[1]) [arr[0], arr[1]] = [arr[1], arr[0]]
/*No idea why I am doing it :(*/
return Array.apply(null, Array(arr[1] - arr[0] + 1)).map((_, i) => arr[0] + i).reduce((e,s) => e+s,0);
}
console.log(sumAll([1, 4]));
console.log(sumAll([10, 5]));