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初学者,并不完全熟悉该语言。
答案 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)