【问题标题】:square of two arrays numbers in javascriptjavascript中两个数组数字的平方
【发布时间】: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 = arrvar b = arr?为什么不只是arr.sort()
  • ab 是同一个数组。所以var sub = a[i] - b[i] 总是将它设置为0
  • 数组类型是通过引用传递的。所以对b 的更改适用于a,因为它们共享相同的引用,这就是为什么减法总是0
  • sub = sub * 2 不是您对数字求平方的方式。 sub = sub * sub 平方它。
  • 我是 a = arr 存储旧数组和 b = 数组 b.short() 所以我会得到新旧数组。但不工作。

标签: javascript arrays


【解决方案1】:

分配数组不会复制。所以abarr 都是同一个数组,而你只是从自身中减去一个数字,总是为零。您需要在另一个变量中复制该数组。

你的平方也没有正确,应该是sub * sub,而不是sub * 2

你应该返回sum。不需要newArr

const arr = [2, 3, 1];

function myFunction(arr) {
  var sorted = [...arr]; // make copy
  sorted.sort(function(a, b) {
    return a - b
  });

  var sum = 0;
  for (var i = 0; i < sorted.length; i++) {
    var sub = arr[i] - sorted[i];
    sub = sub * sub;
    sum += sub;
  }
  return sum;

}

console.log(myFunction(arr));

【讨论】:

猜你喜欢
  • 2012-10-24
  • 1970-01-01
  • 2011-06-07
  • 1970-01-01
  • 2021-12-13
  • 1970-01-01
  • 2018-04-22
  • 1970-01-01
  • 2023-03-28
相关资源
最近更新 更多