【发布时间】:2021-05-15 03:07:07
【问题描述】:
我正在学习编码,现在在 for 循环部分。我在 Codewars 上遇到了一个有趣的问题,并决定解决它。这里是:
您的任务是按降序对数组中连续对之间的差异求和。
例如:
sumOfDifferences([2, 1, 10]) 返回 9
降序:[10,2,1]
总和:(10 - 2) + (2 - 1) = 8 + 1 = 9
如果数组为空或数组只有一个元素,则结果应为 0(在 Haskell 中为空)。>
由于我或多或少只知道 for 循环,所以这是我的答案。它通过了所有测试,但我不得不分离循环。 我的问题是:有没有办法使用嵌套循环来解决这个问题?我最初认为我可以,但我一直得到 NaN 作为输出。
function differenceAddition(array) {
if (array.length == 1) {
return 0;
} else if (array == []) {
return [];
} else
for (let i = 0; i < array.length; i++) {
for (let j = 0; j < array.length; j++) {
if (array[j] < array[j + 1]) {
let temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
}
}
}
let newArray = [];
for (let i = 0; i < array.length - 1; i++) {
newArray[i] = array[i] - array[i + 1];
}
let sum = 0;
for (let i = 0; i < newArray.length; i++) {
sum += newArray[i];
}
// newArray.pop();
return sum;
// return array;
}
【问题讨论】:
-
else if (array == [])永远不可能是真的——但这不是你的问题——使用数组减少 -
哦,你永远不需要嵌套循环来解决这个问题——除非我不明白这个问题
-
单行函数...
const fn = array => array.slice(1).reduce((a, b, i) => a + Math.abs(b - array[i]), 0)
标签: javascript arrays loops