简体   繁体   中英

Remove triplet items from array

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

  1. The starting index
  2. The number of elements to delete starting at that index
  3. Elements to add to the array (optional)

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);
}

Working JSFiddle

 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM