给出一个整数数组,其中值应按以下顺序排序: 如果我们有一个数组
[1, -1, -3, 9, -2, -5, 4, 8,]
我们必须这样重新排列:最大数字,最小数字,第二大数字,第二小数字...
[9, -5, 8, -3, 4, -2, 1, -1 ]
我得到了第一个最大和最小的数字,但无法弄清楚如何使它对于数组中的所有值都是动态的。
我知道我必须使用两个变量,例如 firstSmallest 和 firstLargest 并将它们分别指向数组的第一个索引和最后一个索引,然后运行一个循环在下面的代码中进行操作,并通过递增 firstSmallest 并递减 firstLargest 将值存储到新数组中,但无法实现为代码。
let unsortedArr = [1, 5, 8 , 7, 6, -1, -5, 4, 9, 5]
let output = [];
function meanderArray(unsorted){
let sorted = unsorted.sort((a, b) => a-b);
let firstSmallest = sorted[0];
let firstLargest = sorted[unsorted.length-1];
for(let i = 0; i <= sorted.length; i++){
//I should increment firstSmallest and decrement firstLargest numbers and store in output
}
return output;
}
meanderArray(unsortedArr);
console.log(output);
答案 0 :(得分:3)
您可以使用一个切换对象,该对象从数组中获取第一项或最后一项的属性,并进行迭代,直到没有更多可用项为止。
function meanderArray([...array]) {
const
result = [],
toggle = { shift: 'pop', pop: 'shift' };
let fn = 'shift';
array.sort((a, b) => a - b);
while (array.length) result.push(array[fn = toggle[fn]]());
return result;
}
console.log(...meanderArray([1, 5, 8, 7, 6, -1, -5, 4, 9, 5]));
答案 1 :(得分:1)
您可以按降序对数组进行排序,其逻辑如下:从头开始,从头开始,然后从开始第二,从头开始,第二等等,等等。
let unsortedArr = [1, 5, 8 , 7, 6, -1, -5, 4, 9, 5]
let output = [];
function meanderArray(unsorted){
let sorted = unsorted.sort((a, b) => b-a);
let output = []
for(let i = 0; i < sorted.length/2; i++){
output.push(sorted[i])
if(i !== sorted.length - 1 - i){
output.push(sorted[sorted.length - 1 - i])
}
}
return output;
}
let result = meanderArray(unsortedArr);
console.log(result);
答案 2 :(得分:1)
您可以排序,然后循环并使用pop()提取最后一个数字,并使用shift()提取第一个数字。
let unsortedArr = [1, -1, -3, 9, -2, -5, 4, 8,]
let output = [];
function meanderArray(unsorted){
let sorted = unsorted.sort((a, b) => a - b);
for(let i = 0; i < unsortedArr.length + 2; i++){
output.push(sorted.pop());
output.push(sorted.shift());
}
console.log(output);
return output;
}
meanderArray(unsortedArr);