在数组中查找重复值及其间的差距

时间:2019-01-25 06:57:34

标签: javascript php jquery

示例:[1、4、9、78、42、4、11、56] 这里的重复值为4,间隔为3。

我将数组用于每个数组元素,但我希望优化该查询。

3 个答案:

答案 0 :(得分:1)

在Javascript中,以下代码将为您做同样的事情。

var temp = [1, 4, 9, 78, 42, 4, 11, 56];
var encountered = [];

//This function gets you all the indexes of `val` inside `arr` array.
function getAllIndexes(arr, val) {
  var indexes = [], i;
  for(i = 0; i < arr.length; i++)
    if (arr[i] === val)
      indexes.push(i);
  return indexes;
}

for(var i=0;i<temp.length;i++) {
    if(encountered[temp[i]]) continue; 
    else {
        var indexes = getAllIndexes(temp, temp[i]);
        encountered[temp[i]] = true;
        if(indexes.length>1) {
            var steps = indexes[1]-indexes[0]-1;
            $('.container').append('Duplicate item: '+temp[i]+' steps: '+ steps+'<br/>');
        }
    }
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<div class="container"></div>

答案 1 :(得分:0)

如果有多个重复项,以下解决方案将为您提供帮助。

http://jsfiddle.net/saz1d6re-控制台输出

http://jsfiddle.net/saz1d6re/2/-HTML输出

main

答案 2 :(得分:0)

您可以尝试这种方法。首先映射所有具有重复项的元素,然后过滤掉空值。

const data = [1, 4, 9, 78, 42, 4, 11, 56];
let duplIndex;

const res = data.map((el, index) => {
duplIndex = data.indexOf(el, index+1);
    if(duplIndex !== -1){
        return {el:el, gap: duplIndex - (index + 1)}
    }
}).filter((el) => {
    return el !== undefined;
});