我试图从这个数组中删除重复名为" bigArray"同时保持阵列的三个第一个位置完整(即使它们重复)。
我的问题是for循环中的splice()无法正常工作,因为每次拼接时,for循环都会跳过数组的下一个位置(因为该位置是数组中较低位置的一个位置)。
如何让我的函数返回[0,0,0,3,2]?
谢谢
var bigArray = [0,0,0,3,2,2,3,3,2];
function call() {
for (let i=3; i < (bigArray.length); i++) {
if (bigArray.indexOf(bigArray[i]) !== i) {
bigArray.splice(i,1);
}
}
console.log(bigArray);
return bigArray;
}
call();
&#13;
答案 0 :(得分:2)
您正在使用运行循环的splice()修改阵列。您必须使用第二个数组来存储非重复值。你可以这样做:
var bigArray = [0,0,0,3,2,2,3,3,2];
var noDuplicates = bigArray.slice(0,3);
function call() {
for (let i=3; i < (bigArray.length); i++) {
if (bigArray.indexOf(bigArray[i]) === i) {
noDuplicates.push(bigArray[i]);
}
}
console.log(noDuplicates);
return noDuplicates;
}
call();
答案 1 :(得分:1)
另一种方法。
function finddup(arr){
var tmp = [];
for(var i = 0; i < arr.length; i++){
if(i<3)
{
tmp.push(arr[i]);
}
else
if(tmp.indexOf(arr[i]) == -1)
{
tmp.push(arr[i]);
}
}
return tmp;
}
希望这对你有帮助!
答案 2 :(得分:1)
如果您正在寻找功能性方法:
var arr = [0,0,0,3,2,2,3,3,2];
arr.filter((e,i,self) => i<3 ? true : self.findIndex(x=>x === e) === i)
答案 3 :(得分:0)
你应该减去i。
var bigArray = [0,0,0,3,2,2,3,3,2];
function call() {
for (let i=3; i < (bigArray.length); i++) {
if (bigArray.indexOf(bigArray[i]) !== i) {
bigArray.splice(i,1);
i--;
}
}
console.log(bigArray);
return bigArray;
}
call();
&#13;