编写一个JS程序以以下方式返回数组,即第一个元素是第一个最小值,第二个元素是第一个最大值,依此类推。
该程序包含一个带有一个参数的函数:一个数组。该函数根据需要返回数组。
样本输入:array = [2,4,7,1,3,8,9]。预期输出:[1,9,2,8,3,7,4]。
const arrsort=(arr)=>{
return arr.sort(function(a, b){return a - b});
}
const test=(arr)=>{
arr=arrsort(arr);
var arr2=[];
var j=0;
var k=arr.length-1;
for (var i=0;i<arr.length-1;i++){
if(i%2===0){
arr2.push(arr[j]);
j++;
}
else{
arr2.push(arr[k]);
k--;
}
}
return arr2;
}
答案 0 :(得分:1)
代替使用两个索引,您可以移动并弹出已排序数组副本的值。
var array = [2, 4, 7, 1, 3, 8, 9]
const arrsort = arr => arr.sort((a, b) => a - b);
const test = (arr) => {
var copy = arrsort(arr.slice()),
result = [],
fn = 'pop';
while (copy.length) {
fn = { pop: 'shift', shift: 'pop' }[fn];
result.push(copy[fn]());
}
return result;
}
console.log(test(array));
答案 1 :(得分:0)
对数组进行排序后,它将起作用
awk -F, 'NR>1{if($3>49)temp[$2]++; else temp[$2]=0;if(temp[$2]>=max[$2])max[$2]=temp[$2]} END{for(i in max) print max[i]" "i}' scores.csv
最终输出将是:[1、6、3、5、4、2]
答案 2 :(得分:0)
您可以首先以升序sort()
数组,然后遍历数组的一半。然后push()
对应索引处的值。
let arr = [2,4,7,1,3,8,9];
function order(arr){
let res = [];
arr = arr.slice().sort((a,b) => a-b);
for(let i = 0; i < Math.floor(arr.length/2); i++){
res.push(arr[i],arr[arr.length - 1 - i]);
}
return arr.length % 2 ? res.concat(arr[Math.floor((arr.length - 1)/2)]) : res;
}
console.log(order(arr))
答案 3 :(得分:0)
您可以对数组进行排序,然后复制并反转并推送到另一个数组
const a = [2,4,7,1,3,8,9];
a.sort();
const b = a.slice().reverse();
const res = [];
for (let i = 0; i < a.length; i++) {
if (res.length < a.length) res.push(a[i]);
if (res.length < a.length) res.push(b[i]);
}
console.log(res);
或使用Set
const a = [2,4,7,1,3,8,9];
a.sort();
const b = a.slice().reverse();
const res = new Set();
a.forEach((e, i) => (res.add(e), res.add(b[i])));
console.log(Array.from(res));
答案 4 :(得分:0)
有很多方法可以做到这一点。我的解决方案是我希望的解决方案之一。
查找最大值和最小值,并将它们推入另一个数组。并从实际数组中删除最大,最小。
let array=[2,4,7,1,3,8,9];
let finalArray = [];
let max, min;
for(let i = 0; i < array.length; i++) {
max = Math.max(...array);
min = Math.min(...array);
finalArray.push(min);
finalArray.push(max);
array = array.filter(function(el) {
return el != max && el != min;
})
}
console.log(finalArray);
答案 5 :(得分:0)
对数组进行排序后,可以使用两个迭代器,一个迭代器递增,另一个迭代器递减,直到它们相互交叉为止。
代码如下:
const array = [2, 4, 7, 1, 3, 8, 9];
const test = arr => {
const result = [];
const sortedArr = array.sort((a, b) => a - b);
for (let i = 0, j = sortedArr.length - 1; i <= j; i++, j--) {
result.push(sortedArr[i]);
i == j || result.push(sortedArr[j]);
}
return result;
};
console.log(test(array));