HelloWorld873
2021-03-13 02:18
采纳率: 66.7%
浏览 105

javascript如何实现PHP的 array_multisort函数功能

$i = Array(
    0 => "a",
    1 => "b",
    2 => "c",
    3 => "d",
    4 => "e",
    5 => "f",
    6 => "g",
    7 => "h",
    8 => "i",
);
$p = Array(
   0 => "k",
   1 => "2",
   2 => "p",
   3 => "w",
   4 => "5",
   5 => "o",
   6 => "h",
   7 => "8",
   8 => "u",
);
array_multisort($p, SORT_DESC, $i);
print_r($i);

数组$i 根据 数组$p 的降序进排列,打印结果为,

Array
(
    [0] => d
    [1] => i
    [2] => c
    [3] => f
    [4] => a
    [5] => g
    [6] => h
    [7] => e
    [8] => b
)

那么如何 使用javascript实现 这个PHP  的 array_multisort($p, SORT_DESC, $i); 功能呢,要求结果和php 完全一致??

折腾了很久了,没找到办法???

 

针对 @幻灰龙 这位大佬的方法,使用 x.map((e,i)=>i).sort((i,j)=>y[j].charCodeAt(0)-y[i].charCodeAt(0)).map(i=>x[i]); 以上输出结果倒是和 php的一致,但是数组在长一点就不一样了。

例如:

var 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"];

var 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"];

 x.map((e,i)=>i).sort((i,j)=>y[j].charCodeAt(0)-y[i].charCodeAt(0)).map(i=>x[i]);

//javascript输出的是

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

//而php 的 array_multisort($y, SORT_DESC, $x); 输出的是

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
)


 

 

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

4条回答 默认 最新

  • 天际的海浪 2021-03-13 21:26
    已采纳
    var $i = ["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"];
     
    var $p = ["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"];
     
    var res = $i.map((e,n)=>[$p[n],e]).sort((a,b)=>a[0]<b[0]?1: a[0]>b[0]?-1 : a[1]>b[1]?1 : a[1]<b[1]? -1: 0).map(e=>e[1]);
    console.log(res);
    
    点赞 评论
  • 幻灰龙 2021-03-13 04:27

    const x = ['a','b','c','d','e','f','g','h','i']

    const y = ['k','2','p','w','5','o','h','8','u']

     

    如果不要求就地排序,可以这样

    x.map((e,i)=>i).sort((i,j)=>y[j].charCodeAt(0)-y[i].charCodeAt(0)).map(i=>x[i])

     

    点赞 评论
  • HelloWorld873 2021-03-13 15:55

    已经用哪个后端代替了javascript方法,这个在前端不好弄

    点赞 评论
  • 天际的海浪 2021-03-13 21:27

    点赞 评论

相关推荐 更多相似问题