javascript中正数与负数的比较

javascript中正数与负数的比较,javascript,arrays,algorithm,Javascript,Arrays,Algorithm,我有一个Javascript函数,它计算给定数组中已排序数字的数量。出于某种原因,它适用于所有正数,但当数组包含负数时,函数的行为就好像负数是正数一样。你知道为什么会这样吗 countUniqueValues = (a) => { if(a.length === 0){return 0;} let i = 0; let j = 1; while(a[j]){ if(a[i] === a[j]){ j++;

我有一个Javascript函数,它计算给定数组中已排序数字的数量。出于某种原因,它适用于所有正数,但当数组包含负数时,函数的行为就好像负数是正数一样。你知道为什么会这样吗

countUniqueValues = (a) => {
    if(a.length === 0){return 0;}
    
    let i = 0;
    let j = 1;

    while(a[j]){
        if(a[i] === a[j]){
            j++;
        } 
        else if(a[i] !== a[j]){
            i++;
            a[i] = a[j];
        }
    }
    return i+1;
}
您可以使用一个,它将消除原语值的重复:

const countUniqueValues=arr=>newset(arr).size;
log(countUniqueValues([-2,-1,-1,0,1])您可以使用,它将消除原语值的重复:

const countUniqueValues=arr=>newset(arr).size;
log(countUniqueValues([-2,-1,-1,0,1])
这会有用的!
你的不起作用,因为你从不增加I或J

这会有用的!
你的不起作用,因为你从不增加I或J

这并不能真正回答“关于为什么会发生这种情况的任何想法”。@Ivar是的,老实说,我并不真正理解问题中代码背后的想法是什么。。。这并没有真正意义这并没有真正回答“关于为什么会发生这种情况的任何想法”。@Ivar是的,老实说,我并不真正理解问题中代码背后的想法是什么。。。它实际上没有意义
a[i++]嗯?…嗯
当(a[j])
点击
0
时,它将停止。这看起来像是一个即时错误。如果你想知道它返回2的原因,拿出一支铅笔和一张纸,开始仔细检查它。或者您可以使用浏览器调试器。正如您所知,它也不能处理某些正集,例如,我测试了[2,4,5,6,5]。将
I
调整为
1
并将
a[1]
设置为等于自身。然后所有值都相等,直到
a[j]
由于
0
而提前终止。然后
1+1
产生
2
a[i++]嗯?…嗯
当(a[j])
点击
0
时,它将停止。这看起来像是一个即时错误。如果你想知道它返回2的原因,拿出一支铅笔和一张纸,开始仔细检查它。或者您可以使用浏览器调试器。正如您所知,它也不能处理某些正集,例如,我测试了[2,4,5,6,5]。将
I
调整为
1
并将
a[1]
设置为等于自身。然后所有值都相等,直到
a[j]
由于
0
而提前终止。然后
1+1
产生
2
console.log(countUniqueValues([-2,-1,-1,0,1])); // return 2 and should return 4
let a = [-2,-1,-1,0,1];
var unique = a.filter(onlyUnique);

function onlyUnique(value, index, self) {
 return self.indexOf(value) === index;
}

console.log(unique.length);