簡體   English   中英

從數組中刪除三元組項

[英]Remove triplet items from array

我確實想從陣列中刪除出現(03)次的數字。 我不想刪除重復項,因為它仍然會留下我不需要的數字。 重復數字是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);

我想刪除所有重復2或3次的數字。

Array.prototype.splice()的參數是

  1. 起始索引
  2. 從該索引處開始刪除的元素數
  3. 要添加到數組中的元素(可選)

您的代碼應為:

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

如果您想以更動態的方式刪除重復(甚至超過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);
}

工作中的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); 

想法是確定順序中有多少個重復編號。 如果重復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, 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); 

我嘗試了如下。 您可以使用以下命令刪除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