[英]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];
的数组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)
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>
有点hackey,但是,地狱,我喜欢它。
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;
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.