js数组去重复

    isRepeat()
    function isRepeat() {
        var $array = [0, 0, 0, 0, 0, 0, 0, 1]
        console.log($array.length)
        for (i = 0; i < $array.length; i++) {
            if ($array[i] > 0) {
                console.log($array)
            } else {
                $array.splice(0, 1)
                console.log($array)
                console.log($array.length)
            }

        }
    }
    为什么数组length变4后就不动了啊?我想去下前面没用的0比如0000000001,000000002,最后只剩下有效数字!
阅读 2.4k
4 个回答

因为你的$array.length一直在变啊

for (i = 0; i < $array.length; i++) {}

循环到第四次的时候,i 等于 4 ,$array.length 也是 4 呢

然后如果只是要达到说000001变成1的话,直接转换下数据类型就好啦

Number("0000001")    // 这样就变成数字1啦
Number(0000001)      // 这样也可以变成数字1啦

并不需要js函数处理

for (i = 0; i < $array.length; i++) {//这里的 i < $array.length是每一次重新取值的
所以i等于4的时候,$aray的长度也是4了,就不符合条件了;
推荐使用

isRepeat()

function isRepeat() {
    var $array = [0, 0, 0, 0, 0, 0, 0, 1]
    $array=$array.filter(function(x){if(x>0){return true}else{return false}})
}

你可以这样写

isRepeat()
function isRepeat() {
  var $array = [0, 0, 0, 0, 0, 0, 0, 1],
      arr = []
  for (i = 0; i < $array.length; i++) {
    if ($array[i] > 0) {
      arr.push($array[i])
    } 
  }
  return arr;
}

数组的长度是动态变化的,也就是说当i=4的时候,$array已经删除了前4个0,只剩下了4个数,这个时候$array.length是等于4的,so循环不满足条件无法进行。
至于你想实现的功能就非常简单了,可以在函数内声明一个空数组,然后存储$array中不等于0的数字,不用删除0,这样length就不会发生变化,最后return就行了;
其次还是按照你上面的思路,不用for循环,用$.each进行遍历,把等于0的都删掉,就只剩下了非0的数字;
思路还是比较多的,自己试试吧。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题