【问题标题】:Rearrange array on javascript [duplicate]在javascript上重新排列数组[重复]
【发布时间】:2021-06-26 18:57:50
【问题描述】:

如何以下面的格式重新排列数据,其中最小值放在最右边,下一个值放在最左边,下一个放在倒数第二个位置,等等,工作向中心方向:

var data = [22, 1, 3, 70, 20, 60, 4, 10];
output = [3, 10, 22, 70, 60, 20, 4, 1]

【问题讨论】:

  • 这是我想问的确切问题如何以上述格式重新排列数据?这是什么排序。你能解释一下吗?
  • 能不能分享一下这种奇怪格式排序和分行的逻辑。
  • “还有”:你应该只问一个问题。
  • @trincot 我看错了

标签: javascript arrays sorting


【解决方案1】:

将对象用于 swappign 方法的不同方法。

function f(array, first, second) {
    const
        result = [],
        swap = { unshift: 'push', push: 'unshift' };

    array
        .sort((a, b) => b - a)
        .forEach((fn => v => result[fn = swap[fn]](v))('push'));

    return result;
}

console.log(...f([22, 1, 3, 70, 20, 60, 4, 10]));

【讨论】:

    【解决方案2】:

    首先对数据进行排序,然后以之字形顺序将值分配到一个新数组中:

    function spread(data) {
        let n = data.length;
        // First sort
        let sorted = [...data].sort((a, b) => a - b);
        // Then spread
        let result = Array(n);
        for (let i = 0, j = 0; j < n; i++, j += 2) {
            result[i] = sorted[j + 1];     // zig...
            result[n - 1 - i] = sorted[j]; // zag
        }
        return result;
    }
    
    // Demo
    var data = [22, 1, 3, 70, 20, 60, 4, 10];
    let result = spread(data);
    console.log(result);

    【讨论】:

      【解决方案3】:
      • sort 数组

      • 使用Array.from(data.keys())获取数组的键

        [0, 1, 2, 3, 4, 5, 6, 7]
        
      • 将所有偶数键移到末尾,将奇数键移到前面。

      • 如果要比较的两个键都是奇数,则按升序对键进行排序。

      • 如果两个键都是偶数,则按降序排列。

      • 你会得到一个这样的数组:[1, 3, 5, 7, 6, 4, 2, 0]。然后,map这个索引数组来获取每个索引的数据:

      const data = [22, 1, 3, 70, 20, 60, 4, 10]
      
      data.sort((a, b) => a - b)
      
      const output = Array.from(data.keys())
                          .sort((a, b) => (b % 2 - a % 2) || (a % 2 ? a - b : b - a))
                          .map(i => data[i])
      
      console.log(output)

      【讨论】:

      • 看起来很眼熟...
      • @NinaScholz 我可能从你对一些类似问题的回答中得到了这个想法:)
      • @NinaScholz 我正在寻找那个副本。我没有寻找正态分布
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-02
      • 1970-01-01
      • 2016-10-01
      • 2014-08-21
      • 1970-01-01
      相关资源
      最近更新 更多