JS通过三种类型的排序数组

时间:2019-01-17 12:33:17

标签: 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);

预期结果是:

["Hello", "Hell", "Something here Hello"]

我不确定如何使用内置的sort函数来执行此操作,因为它似乎不打算用于此类情况。有什么建议吗?

1 个答案:

答案 0 :(得分: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);