如何在Javascript中按预先确定的顺序对字符串进行排序?

时间:2018-03-06 04:12:21

标签: javascript

我需要一个排序函数来对数组进行排序,其顺序为b-> c-> a,而无需定义新数组。

input.sort(func)=>输出

输入:[' b',' b',' c',' c',' a' ,''''' a']

输出:[' b',' b','',' c',' c' ,'' a'' a']

3 个答案:

答案 0 :(得分:1)

传递一个类似于排序顺序的字符串数组。现在使用forEach迭代此参数并使用filter过滤掉主数组中的元素。filter将返回一个数组。将元素从已过滤的数组推送到主数组。

var input = ['b', 'b', 'c', 'c', 'a', 'c', 'b', 'a']

function customSort(sortOrderArray) {
  var outPutArray = [];
  // iterate the input order array
  sortOrderArray.forEach(function(item) {
    // now from the original array filter out the elements which are matchin
    var m = input.filter(function(items) {
      return item === items
    })
    // m will be an array
    // using spread operator & push this array to outPutArray
    outPutArray.push(...m)
  })
  return outPutArray;
}
console.log(customSort(['b', 'c', 'a']))

答案 1 :(得分:1)

尝试使用sort

var input = ['b', 'b', 'c', 'c', 'a', 'c', 'b', 'a'];
var order = ['b', 'c', 'a'];

input.sort((e1, e2) => order.indexOf(e1) - order.indexOf(e2))
// output: ['b', 'b', 'b', 'c', 'c', 'c', 'a', 'a']

答案 2 :(得分:1)

d = {b:1,c:2,a:3}
var result = ['b', 'b', 'c', 'c', 'a', 'c', 'b', 'a'].sort(function(v1,v2){
		return d[v1]>d[v2];
})
console.log(result)