首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >像高斯函数一样排列数组(中间是最大值,边缘是最小值)

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

Stack Overflow用户
提问于 2015-09-20 10:05:19
回答 2查看 420关注 0票数 2

我如何排列一个像高斯函数的数组,即中间的最大值,边缘的最小值?

例如:

代码语言:javascript
复制
var Array = [5,2,7,4,1]

将输出以下数组:

代码语言:javascript
复制
[1,4,7,5,2]
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-09-20 10:13:25

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

步骤:

  1. 按降序排列数组
  2. 迭代数组并交替添加排序数组中的元素

代码语言:javascript
复制
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解决方案和下划线解决方案之间的差别(因为逻辑是相同的,只有不同的语法)。

票数 3
EN

Stack Overflow用户

发布于 2015-09-20 10:19:57

这是逻辑。

代码语言:javascript
复制
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));

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32678120

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档