JavaScript计算原数组与升序排序后数组对应项平方差之和
问题分析
原有代码存在以下4个核心问题:
- 引用赋值错误:
var a = arr; var b = arr;两个变量指向同一个数组内存地址,对b执行sort方法会直接修改原数组,最终a和b都是排序后的数组,对应项差值恒为0,完全无法得到正确结果。 - 平方计算逻辑错误:代码里写的
sub = sub * 2是计算差值的2倍,不是需求要求的平方,平方应该写成sub * sub或者Math.pow(sub, 2)。 - 返回值不符合要求:需求要求返回最终的平方差之和的数值,现有代码返回的是每次累加过程值组成的数组
newarr,和需求不符。 - 存在副作用:直接修改外部传入的原数组,会影响函数外的数组值,不符合函数封装的预期。
正确实现代码
function calculateSquareDifferenceSum(arr) { // 拷贝原数组后再排序,避免修改原数组 const sortedArr = [...arr].sort((a, b) => a - b); let sum = 0; for (let i = 0; i < arr.length; i++) { const diff = arr[i] - sortedArr[i]; sum += diff * diff; } return sum; } // 测试示例 const arr = [2, 3, 1]; console.log(calculateSquareDifferenceSum(arr)); // 输出6
内容的提问来源于stack exchange,提问作者leesa
相关产品推荐
相关产品推荐

