繁体   English   中英

如何从数组中删除重复的条目,同时保留非连续的重复项?

[英]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] 我的逻辑是:

  • 逐个浏览所有元素。
  • 如果元素与prev元素相同,则计算元素并执行类似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> 

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

请参阅从JavaScript阵列中删除重复项

暂无
暂无

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

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