从数组中删除三元组项
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()
的参数为
- 起始索引
- 从该索引开始要删除的元素数
- 要添加到数组中的元素(可选)
您的代码应该是:
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);
相关文章:
- 从数组中删除三元组项
- 数组删除重复结果Javascript
- 在内部单击三元组设置值
- 字符串替换或通过数组删除
- 是否有一个 JavaScript 或 Lodash 函数可以轻松迭代成对或三元组
- js中的对象数组:删除重复项
- KnockoutJS.Mapping.FromJS-可观察数组-删除不起作用
- 排序数组删除条目
- 用于垃圾收集的Javascript数组删除
- 为什么”——数组.删除数组的最后一个元素
- PHP循环通过脚本数组&删除项目
- 谷歌地图API:试图使用数组删除多个标记
- 线程安全数组删除
- n -三元组到RDF/XML JavaScript的NodeJS转换器
- 你如何解析一个数组删除键,只返回值与javascript
- 带有for循环+条件的Javascript数组删除不必要的元素
- 在JavaScript中管理像ArrayList这样的数组:删除一个元素并关闭创建的间隙
- 如何在Marklogic JSON文档中插入多个三元组?
- 用于在javascript中从数组中获取所有唯一对、三元组等的通用函数
- 根据允许的项目数组删除 JSON 项