【发布时间】:2021-09-14 18:18:07
【问题描述】:
按升序对其数字排序版本进行比较和排列的函数。返回两个数组的每一项之间的平方差之和。
例子:
对于数组a=[2,3,1],排序后的版本是b=[1,2,3],
.平方差之和为 (2-1)2 + (3-2)2 + (1-3)2 = 6
。或者就数组元素而言 (a[0]-b[0])2 + (a[1]-b[1])2 + (a[2]+b[2])2 = 6
const arr = [2, 3, 1];
function myFunction(arr) {
var newarr = [];
var a = arr;
var b = arr;
var sum = 0;
b.sort(function(a, b) {
return a - b
});
for (var i = 0; i < b.length; i++) {
var sub = a[i] - b[i];
sub = sub * 2;
sum += sub;
newarr.push(sum);
}
return newarr;
}
console.log(myFunction(arr));
【问题讨论】:
-
你为什么要做
var a = arr和var b = arr?为什么不只是arr.sort()? -
a和b是同一个数组。所以var sub = a[i] - b[i]总是将它设置为0。 -
数组类型是通过引用传递的。所以对
b的更改适用于a,因为它们共享相同的引用,这就是为什么减法总是0。 -
sub = sub * 2不是您对数字求平方的方式。sub = sub * sub平方它。 -
我是 a = arr 存储旧数组和 b = 数组 b.short() 所以我会得到新旧数组。但不工作。
标签: javascript arrays