【问题标题】:Intersection of characters in two strings两个字符串中字符的交集
【发布时间】:2017-01-17 22:19:24
【问题描述】:

我有一个带有字符串的对象。

filteredStrings = {search:'1234', select:'1245'}

我想回来

'124'

我知道我可以将它变成一个数组,然后循环遍历每个值并测试该值是否在另一个字符串中,但我正在寻找一种更简单的方法来做到这一点。最好使用 Lodash。

我找到了 _.intersection(Array,Array) 但这仅适用于数组。

https://lodash.com/docs#intersection

我希望能够做到这一点,而不必将对象转换为数组,然后循环遍历每个值,因为这可能会保存大量信息,我希望它尽快工作。

感谢您的帮助。

【问题讨论】:

  • 现在我注意到提到的方法实际上也威胁/将字符串转换为(as)数组? jsfiddle.net/qm6w2umc
  • 奇怪,我尝试在网站上进行,但对我不起作用。谢谢你的帮助。如果您将此作为答案,我会将其标记为正确,因为这是我最终使用的。

标签: javascript lodash


【解决方案1】:

将其中一个字符串 (search) 转换为 RegExp 字符集。在另一个字符串 (select) 上使用带有 String#match 的正则表达式。

注意:与lodash的交集不同,结果字符不是唯一的,例如4可以出现两次。

var filteredStrings = {search:'1234', select:'124561234'}

var result = (filteredStrings.select.match(new RegExp('[' + filteredStrings.search + ']', 'g')) || []).join('');

console.log(result);

【讨论】:

  • 太棒了。我会尝试一下,然后告诉你进展如何。
  • 我希望它们是独一无二的。对不起,我没有提到。你能把它改回你以前的样子吗?
  • 请注意,match() 在没有匹配项时返回null。这意味着您不能只调用.join(),如图所示。您必须先确认您没有收到null
  • @AlexisWilke - 确实如此。添加了一个后备。如果未找到匹配项,则结果将为空字符串。
  • 另请注意,当search 在正确的位置包含]\^- 时,这可能会静默返回错误结果。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多