如何从数组中删除重复项,同时保留非连续的重复项
How to remove repeated entries from an array while preserving non-consecutive duplicates?
我有一个像var arr = [5, 5, 5, 2, 2, 2, 2, 2, 9, 4, 5, 5, 5];
这样的数组,我真的希望输出是[5,2,9,4,5]
。我的逻辑是:
- 逐个遍历所有元素
- 如果元素与前一个元素相同,计数元素并执行
newA = arr.slice(i, count)
- 新数组应该用相同的元素填充。 对于我的示例输入,前3个元素是相同的,因此
newA
将像arr.slice(0, 3)
, newB
将像arr.slice(3,5)
,等等。我试图将其转换为以下代码:
function identical(array){
var count = 0;
for(var i = 0; i < array.length -1; i++){
if(array[i] == array[i + 1]){
count++;
// temp = array.slice(i)
}else{
count == 0;
}
}
console.log(count);
}
identical(arr);
我有问题,弄清楚如何输出一个元素,代表一组元素在数组中是相同的。如果元素不相同,则应按其在原始数组中的顺序输出。
使用array.filter()
可以检查每个元素是否与其前一个相同。
像这样:
var a = [5, 5, 5, 2, 2, 2, 2, 2, 9, 4, 5, 5, 5];
var b = a.filter(function(item, pos, arr){
// Always keep the 0th element as there is nothing before it
// Then check if each element is different than the one before it
return pos === 0 || item !== arr[pos-1];
});
document.getElementById('result').innerHTML = b.join(', ');
<p id="result"></p>
如果您纯粹通过算法而不使用任何函数
var arr = [5, 5, 5, 2, 2, 2, 2, 2, 9, 4, 5, 5, 5];
function identical(array){
var newArray = [];
newArray.push(array[0]);
for(var i = 0; i < array.length -1; i++) {
if(array[i] != array[i + 1]) {
newArray.push(array[i + 1]);
}
}
console.log(newArray);
}
identical(arr);
小提琴;
另一种方法是
var arr = [5, 5, 5, 2, 2, 2, 2, 2, 9, 4, 5, 5, 5];
var result = arr.reduce(function(acc, cur) {
if (acc.prev !== cur) {
acc.result.push(cur);
acc.prev = cur;
}
return acc;
}, {
result: []
}).result;
document.getElementById('d').innerHTML = JSON.stringify(result);
<div id="d"></div>
有点俗气,不过,我喜欢。
var arr = [5, 5, 5, 2, 2, 2, 2, 2, 9, 4, 5, 5, 5];
var arr2 = arr.join().replace(/(.),(?='1)/g, '').split(',');
给你
[5,2,9,4,5]
不可否认,如果你使用多个字符的子字符串,这将会失败,但只要不是这种情况,这应该工作得很好。
试试这个:
var a = [5, 5, 5, 2, 2, 2, 2, 2, 9, 4, 5, 5, 5];
uniqueArray = a.filter(function(item, pos) {
return a.indexOf(item) == pos;
});
参见从JavaScript数组中删除重复项
相关文章:
- 分派点击事件并保留击键修饰符
- 如何使用jquery强制一个单词更改大小写等以保留品牌
- 提交后保留下拉选择的值
- 刷新后保留对网页的更改
- 在mvc应用程序中,在回发时保留最初隐藏的文本框的隐藏或可见状态
- Flash Uploadify在调用我的MVC控制器时没有保留会话/授权
- 当设置addFromAutocompleteOnly时,剩余文本将保留在输入字段中
- 使用递归属性迭代保留属性结构
- Jquery html() 和保留元素名称
- 使用CI和CodeDeploy对node.js应用程序进行连续部署
- 如何将字符串拆分为字符,但在javascript中保留空格
- 离开页面导航后保留文本区域内容
- 连续两页返回Javascript
- 如何在使用JavaScript或jQuery刷新父页面后保留iframe-src
- 匹配 2D 数组中的连续值
- Javascript和RegEx:拆分并保留分隔符
- 如何生成保留标点符号的简单字谜
- 如何做javascript连续滚动-自动加载
- firebase中有没有一种方法可以防止快速连续写入
- 如何从数组中删除重复项,同时保留非连续的重复项