假设a = [3,7,8,66,121,223,228]如何获得其中最大差异的元素? 我对此有解决方案,但是会比这更好的代码。
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)
我希望输出为[121,223]
答案 0 :(得分:2)
您可以将每对与最后找到的对进行核对,并获得具有最大增量的对。
var array = [3, 7, 8, 66, 121, 223, 228],
result = array.reduce((r, b, i, { [i - 1]: a }) => {
if (i === 0) return;
if (i === 1 || b - a > r[1] - r[0]) return [a, b];
return r;
}, undefined);
console.log(result);
答案 1 :(得分:0)
您可以做到
System.Web.Extensions
答案 2 :(得分:0)
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]]
}
答案 3 :(得分:0)
下面的代码返回3个元素
0-找到的最大差异
1-该对中的元素1。
2-该对中的元素2。
使用reduce
语句进行迭代并查找对非常简单。
我还没有使用随机数组对此进行测试。
const array = [3,7, 8,66,121,223,228];
const maxDiff = (arr) => arr.reduce((a, v, i) =>
{
if(i === arr.length-1) return a;
const diff = Math.abs(v-arr[i+1]);
return (diff > a[0]) ? [diff, v, arr[i+1]] : a;
}, [0]);
console.log(maxDiff(array));
// use a simple destructure to seperate diff and elements
const [diff, ...elements] = maxDiff(array);
console.log(elements);
答案 4 :(得分:0)
您可以使用Array.reduce简洁地解决此问题:
let 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]
return acc
}, [])
console.log(maxDiff([3,7,8,66,121,223,228])) // <-- [121,223]
console.log(maxDiff([3,7,8,66,121,223,228,1000])) // <-- [228,1000]
这个想法是从 first 元素(i == 1)
开始的,然后比较最后一对arr[i-1] - arr[i-2]
与当前对(c - arr[i-1])
之间的差异。如果差异更大,则覆盖累加器,直到结束为止。
您实际上可以通过以下方式一行:
let maxDiff = arr => arr.reduce((r,c,i,a) =>
(r = i && c - a[i-1] > a[i-1] - (a[i-2] || 0) ? [a[i-1], c] : r, r), [])
console.log(maxDiff([3,7,8,66,121,223,228])) // <-- [121,223]
console.log(maxDiff([3,7,8,66,121,223,228,1000])) // <-- [228,1000]