Javascript 如何在单个数组中获得差异最大的元素?
假设a=[3,7,8,66121223228]如何得到它们之间差异最大的元素? 我有这个解决方案,但会欣赏比这更好的代码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,
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]]
}