像高斯函数一样排列数组(中间的最大值,边缘的最小值)
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 中的等效函数来缩短代码。
步骤:
- 数组降序排列
- 迭代数组并在开始和结束处交替添加排序数组中的元素
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));
我怎样才能像高斯函数那样排列一个数组,意思是最大值在中间,最小值在边缘?
例如
var Array = [5,2,7,4,1]
将输出以下数组:
[1,4,7,5,2]
我没有使用下划线函数,但您可以使用 underscore/lodash 中的等效函数来缩短代码。
步骤:
- 数组降序排列
- 迭代数组并在开始和结束处交替添加排序数组中的元素
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));