首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何根据搜索关键字对字符串数组进行排序?

如何根据搜索关键字对字符串数组进行排序?
EN

Stack Overflow用户
提问于 2018-06-04 09:01:34
回答 3查看 1.1K关注 0票数 1

我有一串字符串。我需要根据关键字数组对数组进行排序。包含max的字符串。关键字的数量应该排在第一位,等等。另外,包含max的字符串。不是的。搜索关键字应优先于同一搜索关键字出现的次数。testArray应该忽略searchTerms的情况。如果可能,可以忽略结果数组中不包含任何搜索关键字的字符串。

代码语言:javascript
复制
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);
代码语言:javascript
复制
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

如果在上面的代码中观察到,关键字是"I", "right","know"。所以testArray的结果应该如下,

代码语言:javascript
复制
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"关键字。

Codepen

EN

Stack Overflow用户

回答已采纳

发布于 2018-06-04 09:15:44

你可以试试这样的东西:

想法:

  • 循环数据和条件,并创建一个具有计数和值的Map。
  • 使用regex来匹配字符串。这样你就可以进行不区分大小写的搜索了。
  • 根据计数对此地图进行排序。
  • 返回值列表。

代码语言:javascript
复制
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))

票数 1
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50676889

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档