像高斯函数一样排列数组(中间的最大值,边缘的最小值)

Arrange array like gaussian function (max values in middle, min values in edges)

我怎样才能像高斯函数那样排列一个数组,意思是最大值在中间,最小值在边缘?

例如

var Array = [5,2,7,4,1]

将输出以下数组:

[1,4,7,5,2]

我没有使用下划线函数,但您可以使用 underscore/lodash 中的等效函数来缩短代码。

步骤:

  1. 数组降序排列
  2. 迭代数组并在开始和结束处交替添加排序数组中的元素

var arr = [5, 2, 7, 4, 1];

var sortedArr = arr.sort(function(a, b) {
  return b - a;
});

var gaussianArr = [];

sortedArr.forEach(function(e, i) {
  if (i % 2) {
    gaussianArr.push(e);
  } else {
    gaussianArr.unshift(e);
  }
});

console.log(gaussianArr);
document.write(gaussianArr);

想要下划线解决方案吗?

给你。 fiddle。您不会看到 Vanilla JS 解决方案和下划线解决方案之间有太大区别(因为逻辑相同,只是语法不同)。

这是逻辑。

function gSort(arr) {
    var _a = arr.slice()
    _a.sort(function(a,b){return a-b});
    _a.reverse();
    var _isstart = false;
    var _out = [];
    for (var i = 0; i < _a.length; i++) {
        if (i%2) {
           _out.push(_a[i])
        }else{
           _out.splice(0,0,_a[i]); //You can use _out.unshift(_a[i]); also
        }
    }
    return _out;
}

var array = [5,2,7,4,1]
console.log(gSort(array));