简体   繁体   English

从数组中删除三元组项

[英]Remove triplet items from array

I do want to remove the numbers that appears (03) times from my array. 我确实想从阵列中删除出现(03)次的数字。 I don't want to remove duplicates because it will still leave the numbers I don't want. 我不想删除重复项,因为它仍然会留下我不需要的数字。 The repetitive numbers are 143 & 187. 重复数字是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. 我想删除所有重复2或3次的数字。

The parameters for Array.prototype.splice() are Array.prototype.splice()的参数是

  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: 如果您想以更动态的方式删除重复(甚至超过3个),请使用内部循环:

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 工作中的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. 如果重复3次,则从数组中删除重复的数字。

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. 您可以使用以下命令删除3或更多的连续出现。

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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