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

时间:2019-06-11 18:54:31

标签: javascript arrays sorting

假设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]

5 个答案:

答案 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]