我有一串字符串。我需要根据关键字数组对数组进行排序。包含max的字符串。关键字的数量应该排在第一位,等等。另外,包含max的字符串。不是的。搜索关键字应优先于同一搜索关键字出现的次数。testArray应该忽略searchTerms的情况。如果可能,可以忽略结果数组中不包含任何搜索关键字的字符串。
var testArray = [
"I am",
"I am wrong and I don't know",
"I am right and I know",
"I don't know",
"I do know"
],
searchTerms = ["I", "right","know"];
$.each(searchTerms, function(index, term) {
var regX = new RegExp(term, "i");
testArray = $.map(testArray, function(item) {
if (regX.test(item)) {
return item;
} else {
return;
}
});
});
console.log(testArray);<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
如果在上面的代码中观察到,关键字是"I", "right","know"。所以testArray的结果应该如下,
testArray = [
"I am right and I know",
"I am wrong and I don't know",
"I don't know",
"I do know",
"I am"
]string包含所有的关键字优先,其他字符串包含"I","know",所以它们是next,而string "I am"是最后一个,因为它只包含"I"关键字。
发布于 2018-06-04 09:15:44
你可以试试这样的东西:
想法:
function getMatchCountMap(data, criterias) {
return data.reduce((countMap, curItem) => {
var count = criterias.filter((criteria) => new RegExp(criteria, 'i').test(curItem) ).length;
countMap.push({
value: curItem,
count: count
});
return countMap;
}, [])
}
function sortBasedOnCount(data, criterias) {
var map = getMatchCountMap(data, criterias);
map.sort((a, b) => b.count - a.count);
return map.map(x => x.value);
}
var testArray = [
"I am",
"I am wrong and I don't know",
"I am right and I know",
"I don't know",
"I do know"
],
searchTerms = ["I", "right","know"];
console.log(sortBasedOnCount(testArray, searchTerms))
https://stackoverflow.com/questions/50676889
复制相似问题