Javascript 按部分字符串对数组进行排序

Javascript sorting array by partial string

我有一个这样的数组

 var myArray = [ 
    "J20J205147902_B_B716202",
    "R20Q205147902_F_B716202",
    "P20W205147_902_alternate1",
    "M20K205147_902_alternate4",
    "F20G205147_902_alternate3",
    "K20J205147_902_alternate2",
    "L20H205147_902_main"];

我想按此模式对数组进行排序

var map = { 
    "_F_":1,
    "_main":2,
    "_alternate1":3,
    "_alternate2":4,
    "_alternate3":5,
    "_alternate4":6,
    "_alternate5":7,
    "_B_":8
};

所以,输出应该是这样的

"R20Q205147902_F_B716202",
"L20H205147_902_main",
"P20W205147_902_alternate1",
"K20J205147_902_alternate2",
"F20G205147_902_alternate3",
"M20K205147_902_alternate4",
"J20J205147902_B_B716202"

您可以使用自定义排序比较器函数,如下所示:

var myArray = [
  "J20J205147902_B_B716202",
  "R20Q205147902_F_B716202",
  "P20W205147_902_alternate1",
  "M20K205147_902_alternate4",
  "F20G205147_902_alternate3",
  "K20J205147_902_alternate2",
  "L20H205147_902_main"];

var map = {
  "_F_":1,
  "_main":2,
  "_alternate1":3,
  "_alternate2":4,
  "_alternate3":5,
  "_alternate4":6,
  "_alternate5":7,
  "_B_":8
}

myArray.sort((...args) => {
  const [a, b] = args.map(str => Object.keys(map).find(key => str.includes(key)))
  return map[a] - map[b];
})
console.log(myArray)