[英]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
}
让我们通过一个示例逐步介绍一下:
a [posi]现在将从索引1处的数组中获取值为3 (在数组test1中)
如果(a [posi] <0)返回正值+ 1,则除非数据中某处存在负数或0 (Math.abs(0)-1 === -1),否则它将永远不会返回。
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.