我需要根据搜索词按以下顺序对数组进行排序。
代码:
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函数来执行此操作,因为它似乎不打算用于此类情况。有什么建议吗?
答案 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);