使用Javascript的数组中两个数字之间的最小距离

使用Javascript的数组中两个数字之间的最小距离,javascript,arrays,Javascript,Arrays,我正在寻找一个更好的解决方案,以获得阵列中两个元素之间的最小距离。 输入:arr[]={3,5,4,2,6,5,6,6,5,4,8,3},x=3,y=6 输出:3和6之间的最小距离为4 我用JS编写了这段代码&目前它运行良好。 我正在寻找更好的代码来实现同样的目标。 谢谢 变量数=[“2”、“3”、“5”、“7”、“1”、“2”、“3”、“4”、“8”]; var x=“5”; var y=“8”; var firstIndex=numbers.indexOf(x); var minD=数字。

我正在寻找一个更好的解决方案,以获得阵列中两个元素之间的最小距离。 输入:arr[]={3,5,4,2,6,5,6,6,5,4,8,3},x=3,y=6 输出:3和6之间的最小距离为4

我用JS编写了这段代码&目前它运行良好。 我正在寻找更好的代码来实现同样的目标。 谢谢


变量数=[“2”、“3”、“5”、“7”、“1”、“2”、“3”、“4”、“8”];
var x=“5”;
var y=“8”;
var firstIndex=numbers.indexOf(x);
var minD=数字。长度;
var x=数字.forEach(函数(项、索引){
如果((项目==x)| |(项目==y))
{
如果((索引!=firstIndex)&(索引firstIndex
我不确定这是否真的更短或更好,只是另一种方法

我只需过滤掉所有的x和y位置,然后计算它们之间的距离(iy ix)并取smalles值(.sort()[0])

我不确定这是否真的更短或更好,只是另一种方法

我只需过滤掉所有的x和y位置,然后计算它们之间的距离(iy ix)并取smalles值(.sort()[0])


如果实际差异较小,您可以保留指数并通过测试优化最小值

函数getMinDistance(数组、左、右){ var rightIndex、leftIndex、minDistance; forEach(函数(a,i){ if(a==左&&(leftIndex==未定义| | leftIndexrightIndex-leftIndex)){ minDistance=右索引-左索引; } }); 回心转意 } 日志(getMinDistance([“2”、“3”、“5”、“7”、“1”、“2”、“3”、“4”、“8”]、“5”、“8”));
log(getMinDistance([3,5,4,2,6,5,6,6,5,4,8,3],3,6))您可以保留索引,并通过测试实际差异是否较小来优化最小值

函数getMinDistance(数组、左、右){ var rightIndex、leftIndex、minDistance; forEach(函数(a,i){ if(a==左&&(leftIndex==未定义| | leftIndexrightIndex-leftIndex)){ minDistance=右索引-左索引; } }); 回心转意 } 日志(getMinDistance([“2”、“3”、“5”、“7”、“1”、“2”、“3”、“4”、“8”]、“5”、“8”)); log(getMinDistance([3,5,4,2,6,5,6,6,5,4,8,3],3,6))

函数findMin(arr,a,b){
var firstIndex=arr.indexOf(a);
console.log(firstIndex);
var lastIndex=arr.indexOf(b);
log(lastIndex);
心理距离;
if(firstIndex==lastIndex){
思维距离=1;
}
如果(第一指数

函数findMin(arr,a,b){
var firstIndex=arr.indexOf(a);
console.log(firstIndex);
var lastIndex=arr.indexOf(b);
log(lastIndex);
心理距离;
if(firstIndex==lastIndex){
思维距离=1;
}

if(FirstIndex)什么是“更好”?什么是
汽车
?什么是“更好”什么是<代码>汽车< /代码>?@ AKRITi1711,这两个方向都适用,而NiNAS代码只从左到右工作。但是,她的速度要快得多。请考虑一个对你更好,并勾选绿色的复选标记……AAKRITi1711这两个方向都是有效的,而下面的NINA代码只从左到右工作。快多了。请考虑一个对你更好,并勾选绿色的复选标记…
<script>
var numbers= ["2", "3", "5","7","1","2","3","4","8"];
var x ="5";
var y ="8";
var firstIndex = numbers.indexOf(x);

var minD = numbers.length;

var x= numbers.forEach(function(item,index){

if((item == x) || (item == y))
{
    if((index != firstIndex) && (index-firstIndex < minD))
    {
    minD = index-firstIndex;
    firstIndex = index;
    }
    else
    {
    firstIndex = index;
    }
 }

});
alert(minD);

document.getElementById("demo").innerHTML = minD;
</script>
var xs=array.reduce((arr,el,i)=>(!(el===x)||arr.push(i),arr),[]);
var ys=array.reduce((arr,el,i)=>(!(el===y)||arr.push(i),arr),[]);
var lowest= xs.map(ix=>ys.map(iy=>Math.abs(iy-ix)).sort()[0]).sort()[0];