javascript如何实现 PHP 的 array_multisort函数

$x = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"];

$y = ["e", "0", "0", "5", "6", "0", "b", "9", "6", "a", "c", "5", "5", "d", "3", "b", "5", "5", "f", "9", "8", "5", "d", "2", "9", "f", "b", "d", "6", "3", "d", "1", "9", "8", "c", "6", "1", "e", "9", "6", "a", "4", "1", "a", "d", "0", "1", "e", "9", "f", "c", "b", "c", "b", "4", "c", "7", "f", "0", "7", "7", "6"];

array_multisort($y, SORT_DESC, $x);

print_r($x);
 

这时候 $i 数组会根据 $p 数组进行排序。打印结果为:


Array
(
    [0] => N
    [1] => V
    [2] => s
    [3] => z
    [4] => B
    [5] => L
    [6] => a
    [7] => 1
    [8] => 4
    [9] => I
    [10] => n
    [11] => w
    [12] => 8
    [13] => O
    [14] => Q
    [15] => T
    [16] => k
    [17] => 0
    [18] => P
    [19] => R
    [20] => g
    [21] => p
    [22] => E
    [23] => H
    [24] => j
    [25] => 6
    [26] => C
    [27] => M
    [28] => h
    [29] => t
    [30] => y
    [31] => 7
    [32] => u
    [33] => U
    [34] => X
    [35] => Y
    [36] => 2
    [37] => 9
    [38] => D
    [39] => Z
    [40] => e
    [41] => i
    [42] => d
    [43] => l
    [44] => m
    [45] => q
    [46] => r
    [47] => v
    [48] => F
    [49] => S
    [50] => 3
    [51] => o
    [52] => x
    [53] => 5
    [54] => A
    [55] => G
    [56] => K
    [57] => J
    [58] => W
    [59] => b
    [60] => c
    [61] => f
)

那么如果使用javascript 实现 array_multisort 这种功能呢??

阅读 1.9k
1 个回答

使用 Lodash 的 orderBy,区别在于 _.orderBy 的三个参数分别是:要排序的数组,排序的键(按主次依次),排序的方式("desc""asc"),数据只能用一个参数提供,所以如果是多个数组的话,需要先组合(可以用 _.zip 来组合),排序完成之后再拆开(用 _.zip 的反向操作 _.unzip)。

import _ from "lodash";

const x = [
    "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l",
    "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x",
    "y", "z", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9",
    "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L",
    "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"];

const y = [
    "e", "0", "0", "5", "6", "0", "b", "9", "6", "a", "c", "5",
    "5", "d", "3", "b", "5", "5", "f", "9", "8", "5", "d", "2",
    "9", "f", "b", "d", "6", "3", "d", "1", "9", "8", "c", "6",
    "1", "e", "9", "6", "a", "4", "1", "a", "d", "0", "1", "e",
    "9", "f", "c", "b", "c", "b", "4", "c", "7", "f", "0", "7", "7", "6"];

const r = _()
    .zip(y, x)      // 组合成 [["e", "a"], ["0", "b"] ... ["f", "N"] ... ] 这样的数组
    .orderBy([0, 1], ["desc", "asc"])   // 这就是类似 multisort 的函数
    .unzip()        // 排完序之后再拆分成 y 和 x 两个数组(已经排好序的)[["f", ... ], ["N", ...]]
    .last();        // 其中 y 已经不需要了,直接取 x,也就是两个中的最后那个,得到结果

console.log(r);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题