从另一个数组推入数组中的元素

时间:2019-06-16 14:08:02

标签: javascript arrays

编写一个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;
}

6 个答案:

答案 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));