【问题标题】:Javascript sort array outer values to innner values [duplicate]Javascript将数组外部值排序为内部值[重复]
【发布时间】:2021-12-21 02:39:42
【问题描述】:

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

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

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()(或类似的单行函数方法)的解决方案更可取,但此时我将采取任何可以完成此任务的方法。

【问题讨论】:

    标签: javascript arrays sorting


    【解决方案1】:

    1)您可以使用shiftpop轻松实现解决方案

    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; }

    【讨论】:

      【解决方案2】:

      试试这个:

      let array = [1, 2, 3, 4, 5];
      
      let l = array.length;
      let mid = parseInt(l/2);
      
      let sorted = [];
      if (l > 2) {
        for (let i = 0; i < mid; i++) {
             sorted.push(array[i]);
             sorted.push(array[l-i-1]);
        }
      } else
        sorted = array;
      
      if ((l % 2) != 0) { // add the mid element of the array to the end.
        sorted.push(array[mid]);
      }
      
      console.log(sorted); 

      【讨论】:

        猜你喜欢
        • 2011-02-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-28
        • 2019-03-17
        • 1970-01-01
        相关资源
        最近更新 更多