JS排序数组有三种排序方式

und*_*ned 3 javascript sorting

我需要根据搜索词按以下顺序对数组进行排序.

  1. 确切的字符串.
  2. 以..开始.
  3. 包含.

代码:

var arr = ['Something here Hello', 'Hell', 'Hello'];

var term = 'Hello';

var sorted = arr.slice().sort((a, b) => {
  let value = 0;

  if (a.startsWith(term)) {
    value = -1;
  }

  if (a.indexOf(term) > -1) {
    value = -1;
  }

  if (a === term) {
    value = -1;
  }

  return value;
});

console.log(sorted);
Run Code Online (Sandbox Code Playgroud)

预期的结果是:

["Hello", "Hell", "Something here Hello"]
Run Code Online (Sandbox Code Playgroud)

我不确定如何使用内置的排序功能来执行此操作,因为它看起来并不适合与此类情况一起使用.请问有什么建议吗?

Nin*_*olz 6

您需要一个为分阶段排序返回值的函数.

在排序回调内部,您需要返回反映两个字符串之间关系的两个值的增量.

const compareWith = term => string => {
        if (string === term) return 1;
        if (term.startsWith(string)) return 2; // switch string and term
        if (string.includes(term)) return 3;   // use includes
        return Infinity;                       // unknown strings move to the end
    };

var array = ['Something here Hello', 'Hell', 'Hello'],
    term = 'Hello',
    order = compareWith(term);

array.sort((a, b) => order(a) - order(b));

console.log(array);
Run Code Online (Sandbox Code Playgroud)