示例:[1、4、9、78、42、4、11、56] 这里的重复值为4,间隔为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;
});