I do want to remove the numbers that appears (03) times from my array. I don't want to remove duplicates because it will still leave the numbers I don't want. The repetitive numbers are 143 & 187.
var number = [11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 143, 143, 143, 149, 151, 157, 163, 167, 173, 179, 181, 187, 187, 187, 191];
for (i = 0; i < number.length; i++) {
if ((number[i] == number[i + 1]) && (number[i + 1] == number[i + 2])) {
document.write(number[i]);
document.write(number[i + 1]);
document.write(number[i + 2] + "<br>");
number.splice(number[i - 1], number[i], number[i + 1], number[i + 2]);
}
};
document.write(number);
I want to remove all numbers that repeats 2 or 3 times.
The parameters for Array.prototype.splice()
are
Your code should be:
for (i = 0; i < number.length; i++) {
if (number[i] == number[i + 1])
if (number[i] == number[i + 2])
number.splice(i, 3);
else
number.splice(i, 2);
}
If you would like a more dynamic way of removing repeats (even more than 3), use an inner loop:
for (i = 0; i < number.length; i++) {
var inARow = 1;
while (number[i] == number[i + inARow])
inARow++;
if (inARow > 1)
number.splice(i, inARow);
}
var number = [11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 143, 143, 143, 149, 151, 157, 163, 167, 173, 179, 181, 187, 187, 187, 191], isDuplicate = false, totalDuplicate = 0, thresHoldDuplicating = 3, tmpNumber = number[0], resultNumber = [tmpNumber]; var resetFn = function () { isDuplicate = false; totalDuplicate = 0; } for (i = 1; i < number.length; i++) { if (tmpNumber !== number[i]) { tmpNumber = number[i]; resetFn(); resultNumber.push(number[i]); continue; } isDuplicate = true; totalDuplicate += 1; if (totalDuplicate === thresHoldDuplicating - 1) { resetFn(); resultNumber.splice((resultNumber.length - 1), thresHoldDuplicating); } }; document.write('before: ' + number + '\\n'); document.write('after: ' + resultNumber);
The idea is identify how many duplicate number in sequence. if it duplicate 3 times then remove the duplicated number from the Array.
Try this
var number = [11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 143, 143, 143, 149, 151, 157, 163, 167, 173, 179, 181, 187, 187, 187, 191,319,319,319,323,323,323]; for (i = 0; i < number.length; i++) { var cnt = 1,t = i,k = 0; while (number.indexOf(number[i], t==number.length-1?t:t + 1) >= 0 && k < number.length) { cnt++; var t = number.indexOf(number[i], t + 1); k++; } if (cnt >= 3) { var f = number[i]; console.log("deleted " + f) while (number.indexOf(f) >= 0) { number.splice(number.indexOf(f), 1); } } }; document.write(number);
I tried it like the following. You can remove 3
or more consecutive occurrences using the following.
var number = [11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 143, 143, 143, 143, 149, 151, 157, 163, 167, 173, 179, 181, 187, 187, 187, 191]; var prev; var occurance = 1; var deletePos = []; var offset = 0; /* Get 3+ repeat positions. */ for(i = 0; i < number.length; i++){ if(occurance >= 3 && prev != number[i]) deletePos.push({occurance: occurance, index:i}); occurance = (prev == number[i]) ? (occurance + 1) : 1; prev = number[i]; } /* Delete items in each positions. */ for(j = 0; j < deletePos.length; j++){ var reObj = deletePos[j]; number.splice((reObj.index - offset - reObj.occurance), reObj.occurance); offset += reObj.occurance; } document.write(number);
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.