繁体   English   中英

Javascript中的Math.Abs​​()-数组意外

[英]Math.Abs() in Javascript - array unexpected

如果我在Math.abs()中传递数组,我将无法理解为什么它返回-3,为什么我的值从正变为负

let test1 = [2, 3, 3, 1, 5, 2]
let test2 = [2, 4, 3, 5, 1]
function firstDuplicate(a) {
  for (let i of a) {
    console.log(i);
    let posi = Math.abs(i) - 1;
    //console.log(posi);
  }

}
console.log(firstDuplicate(test1))
console.log(firstDuplicate(test2))

我不明白Math.abs的工作方式,下面是实际代码

function firstDuplicate(a) {
  for (let i of a) {
    let posi = Math.abs(i) - 1
    if (a[posi] < 0) return posi + 1
    a[posi] = a[posi] * -1
  }

  return -1
}

Math.abs()返回number的绝对值。 但是,您将绝对值乘以负数1.这就是为什么您得到负值的原因

a[posi] = a[posi] * -1

您的代码有一些缺陷。

  for (let i of a) { 
    let posi = Math.abs(i) - 1
    if (a[posi] < 0) return posi + 1
    a[posi] = a[posi] * -1
  }

让我们通过一个示例逐步介绍一下:

  1. (让我为a)会为您提供错误中的每个值。 例如在第一个循环上, i = 2
  2. 让POSI = Math.abs(I) - 1将数转换从阵列到绝对整数和1。减去立即POSI将(2 - 1)= 1。
  3. a [posi]现在将从索引1处的数组中获取值为3 (在数组test1中)

  4. 如果(a [posi] <0)返回正值+ 1,则除非数据中某处存在负数或0 (Math.abs(0)-1 === -1),否则它将永远不会返回。

  5. a [posi] = a [posi] * -1现在,您可以更改数组中的值。 在我们的示例中:a [1] = a [1] * -1。 这将使数组处于以下状态: [2,-3、3、1、5、2]

我希望这可以帮助您理解自己的代码。 也许谷歌为“如何找到Aray中的第一个重复”的解决方案,只是复制它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM