Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在单个数组中获得差异最大的元素?_Javascript_Arrays_Sorting - Fatal编程技术网

Javascript 如何在单个数组中获得差异最大的元素?

Javascript 如何在单个数组中获得差异最大的元素?,javascript,arrays,sorting,Javascript,Arrays,Sorting,假设a=[3,7,8,66121223228]如何得到它们之间差异最大的元素? 我有这个解决方案,但会欣赏比这更好的代码 let arr = [] a.sort((a,b)=>{ return arr.push(a-b) }) let index = arr.indexOf(Math.max(...arr)) a.sort((a,b)=> a-b).slice(index,index+2) 我希望输出为[121223]您可以这样做 var a = [3,7, 8,66,

假设a=[3,7,8,66121223228]如何得到它们之间差异最大的元素? 我有这个解决方案,但会欣赏比这更好的代码

let arr = []
a.sort((a,b)=>{
    return arr.push(a-b)
})
let index = arr.indexOf(Math.max(...arr))
a.sort((a,b)=> a-b).slice(index,index+2) 
我希望输出为[121223]

您可以这样做

 var a = [3,7, 8,66,121,223,228]
 var difference = 0;
 var pairIndex = 0;

 for(i = 0; i < a.length; i++) {
  var currentItem = a[i];
  var nextItem = a[i+1];
  var currentDifference = Math.abs(currentItem - nextItem);

  if(currentDifference > difference) {
    difference = currentDifference;
    pairIndex = i;
  }
 }

var pair = [a[pairIndex], a[pairIndex + 1]];
return pair;
var a=[3,7,8,66121223228]
var差=0;
var-pairIndex=0;
对于(i=0;i差异){
差=电流差;
pairIndex=i;
}
}
变量对=[a[pairIndex],a[pairIndex+1];
返回对;
a=[3,7,8,66121223228]
设MaxIntervalPosition=0
for(设i=0;i MaxIntervalPosition){
MaxIntervalPosition=i
}
返回[a[i],a[i+1]]
}

下面的代码返回3个元素

0-找到的最大差异

1-该对中的元素1

2-该对中的元素2

使用
reduce
语句进行迭代并找到该对非常简单。 我还没有用随机数组测试过这一点

const数组=[3,7,8,66121223228];
常量maxDiff=(arr)=>arr.reduce((a,v,i)=>
{
如果(i==arr.length-1)返回a;
常数差=数学绝对值(v-arr[i+1]);
返回(差异>a[0])?[diff,v,arr[i+1]]:a;
}, [0]);
log(maxDiff(数组));
//使用简单的分解结构来分离差异和元素
常量[diff,…元素]=maxDiff(数组);

控制台日志(元素)您可以使用最后找到的对检查每一对,并获得具有最大增量的一对

var数组=[3,7,8,66,121,223,228],
result=array.reduce((r,b,i,{[i-1]:a})=>{
如果(i==0)返回;
如果(i==1 | | b-a>r[1]-r[0])返回[a,b];
返回r;
},未定义);

控制台日志(结果)您可以通过以下方法以简洁的方式解决此问题:

让maxDiff=arr=>arr.reduce((acc,c,i,arr)=>{
if(i&c-arr[i-1]>arr[i-1]-arr[i-2])
acc=[arr[i-1],c]
返回acc
}, [])

console.log(maxDiff([3,7,8,66121223228])//为什么
121
223
?你是指两个连续元素之间的差异吗?现在这个问题的措辞如何,听起来就像你想要数组中的
min
max
值,因为它们将是差异最大的元素。很好,沙赫扎德。我认为我们可以使用array.map()代替for循环,并用三元运算符替换if语句。@VishavKirat07 map基本上只是建立一个新的结构并返回。我们真的不需要这样的开销。我们不能使用三元运算符,因为这里没有其他部分。此外,我们在if中执行多个语句。这不是最好的情况。竖起大拇指,阿克里昂山克斯。很高兴我能帮忙。太棒了,尼娜。简洁明了。
a= [3,7, 8,66,121,223,228]
let MaxIntervalPosition = 0

for(let i=0;i<a.length-2;i++){
    if(Math.abs(a[i]-a[i+1]) > MaxIntervalPosition) {
        MaxIntervalPosition = i
    }
    return [a[i],a[i+1]]
}