如何在Jquery中使用给定的任何特定排序顺序对字符串数组进行排序

How to sort an array of Strings in Jquery with any specific sort order given

本文关键字:排序 顺序 字符串 数组 任何特 Jquery      更新时间:2023-09-26

我有一个字符串数组:

var arrStr = ["Ron", "Jhon", "Mary", "Alex", "Ben"];

上面的数组是我需要的默认排序顺序。我有另一个字符串数组:

var arrStr2 = ["Mary", "Alex", "Jhon"];

我想用arrStr中的排序顺序对arrStr2进行排序。(arrStr中的顺序也可以更改,因此应该对arrStr2进行排序)。arrStr2也可以有更多的值,但这些值将仅来自数组arrStr 中的任何值

排序后,我需要一个arrStr2的输出作为["Jhon","Mary","Alex"];

如何使用jQuery实现这一点?

只需计算交集,无需sort():

var arrStr = ["Ron", "Jhon", "Mary", "Alex", "Ben"];
var arrStr2 = ["Mary", "Alex", "Jhon"];
result = arrStr.filter(x => arrStr2.includes(x))
document.write('<pre>'+JSON.stringify(result,0,3));

(ES5左后移作为练习)。

排序后,我需要arrStr2的输出为["Jhon"、"Mary"、"Alex"];

只需试试这个

arrStr2.sort(function(a,b){ return arrStr.indexOf(a) - arrStr.indexOf(b) });

现在arrStr2将具有您期望的值,

演示

var arrStr = ["Ron", "Jhon", "Mary", "Alex", "Ben"];
var arrStr2 = ["Mary", "Alex", "Jhon"];
arrStr2.sort(function(a,b){ return arrStr.indexOf(a) - arrStr.indexOf(b) });
document.body.innerHTML = JSON.stringify( arrStr2, 0, 4 );

这是另一种方法:

var rank = {};
arrStr.forEach(function(e, i){rank[e] = i;});
arrStr2.sort(function(a, b) {return rank[a] - rank[b];});