首页 > 解决方案 > Javascript将数组外部值排序为内部值

问题描述

我真的不知道如何表达这个问题,这可能是我在谷歌上搜索时没有找到任何东西的原因,所以如果你想重命名这个或将我引导到一个已经做了我想要的帖子非常感激。

无论如何,我想按如下方式对数组进行排序:

let array = [1, 2, 3, 4, 5];
let sorted = array.sort(someFunction);

console.log(sorted); // -> [1, 5, 2, 4, 3]

array = [1, 2, 3, 4];
sorted = array.sort(someFunction);

console.log(sorted); // -> [1, 4, 2, 3]

看看它是如何首先抓取最外层的元素(1 和 5),然后是下一个最近的层(2 和 4),最后是中间的元素(3)?这就是我想要的。

显然,使用Array.sort()(或类似的单行函数方法)的解决方案是可取的,但此时我将采取任何可以完成此任务的方法。

标签: javascriptarrayssorting

解决方案


1)shift您可以使用和轻松实现解决方案pop

function getValue(arr) {
  const result = [];
  while (arr.length) {
    result.push(arr.shift());
    if (arr.length) result.push(arr.pop());
  }
  return result;
}

let array = [1, 2, 3, 4, 5];
console.log(getValue(array));

2)您也可以使用two-pointer算法来做到这一点

function getValue(arr) {
  const result = [];
  let start = 0,
    end = arr.length - 1;

  while (start < end) result.push(arr[start++], arr[end--]);
  if (start === end) result.push(arr[start]);

  return result;
}

console.log(getValue([1, 2, 3, 4, 5]));
console.log(getValue([1, 2, 3, 4]));
console.log(getValue([1, 2, 3]));
/* This is not a part of answer. It is just to give the output full height. So IGNORE IT */
.as-console-wrapper { max-height: 100% !important; top: 0; }


推荐阅读