无法在JavaScript中删除重复项。

时间:2015-08-18 14:24:53

标签: javascript

var numberArray = [1,2,3,4, 5,6,7,8,9, 9, 4];
var newArray = [];

function primeChecker(arrayCheck){
    for (var i = 0; i < arrayCheck.length; i++){
        if (Math.sqrt(arrayCheck[i]) % 1 === 0) {
            newArray.push(arrayCheck[i]);
        }

    }

    for (var x = 0; x < newArray.length; x++){
         newArray.sort();
        if (newArray[x] === newArray[x -1]){
            newArray.splice(newArray[x-1]);
        }
    }
}

primeChecker(numberArray);
console.log(newArray);

返回的数组是[1,4,4,9]。该功能成功摆脱了重复的9s,但我还剩下两个4s。有什么想法可能是这样吗?我是一名JavaScript初学者,并不完全熟悉该语言。

3 个答案:

答案 0 :(得分:3)

向后循环。从数组中删除项目时,数组会变短。

答案 1 :(得分:0)

https://jsfiddle.net/2w0k5tz8/

function remove_duplicates(array_){
    var ret_array = new Array();
    for (var a = array_.length - 1; a >= 0; a--) {
        for (var b = array_.length - 1; b >= 0; b--) {
            if(array_[a] == array_[b] && a != b){
                delete array_[b];
            }
        };
        if(array_[a] != undefined)
            ret_array.push(array_[a]);
    };
    return ret_array;
}

console.log(remove_duplicates(Array(1,1,1,2,2,2,3,3,3)));

循环,删除重复项,并创建克隆数组占位符,因为数组索引不会更新。

向后循环以获得更好的性能(您的循环不需要继续检查数组的长度)

答案 2 :(得分:0)

您不需要插入已经在newArray中的数字,您可以使用indexOf方法知道数组中的元素。 在if中尝试它,你可以删除第二个cicle。 像这样:

if (Math.sqrt(arrayCheck[i]) % 1 === 0 && newArray.indexOf(arrayCheck[i])==-1)