【问题标题】:Find all possible matching string and sub-strings from an array从数组中查找所有可能的匹配字符串和子字符串
【发布时间】:2019-03-10 00:00:42
【问题描述】:

我试图找到一种逻辑来从数组中选择匹配的字符串和匹配的子字符串。例如:

我有一个字符串 "3-100" 和一个字符串数组 ["3", "3-1", "3-15", "3-",3-10", "3-100"] .

当我遍历数组并比较字符串时,我应该在 2 种情况下得到 true

"3" -> true,
"3-1" -> false,
"3-15" -> false,
"3-" -> false,
"3-10" -> false,
"3-100" -> true,

我怎样才能做到这一点。我尝试了 .includes() ,它将在除“3-15”之外的所有情况下返回 true。期待

补充

【问题讨论】:

  • @anubhava 没有。 3-100 的组合应该只返回 true :)
  • 为什么3 是真的呢?
  • 我的意思是 3 和 3-100 的组合应该只为真 :)

标签: javascript arrays regex string typescript


【解决方案1】:

这应该可以工作并且向后兼容:

var arr = ["3", "3-1", "3-15", "3-", "3-10", "3-100"];
var SearchA = "3";
var SearchB = "100";

for( var i=0; i< arr.length; i++) {
  console.log( arr[i] + " = " + ValidateValue(SearchA,SearchB,arr[i]))
}

function ValidateValue( A, B, value ){
  var subarr = value.split("-");
  if( subarr[0] != A ) return false;
  if( subarr.length == 1 ) return true;
  if( subarr[1] != B ) return false;
  return true;
}

你也可以在这里测试:JS Bin

【讨论】:

    【解决方案2】:

    您可以拆分字符串并查找带有Array#includes 的部分。

    var string = "3-100",
        parts = string.split('-').map((_, i, a) => a.slice(0, i + 1).join('-')),
        array = ["3", "3-1", "3-15", "3-", "3-10", "3-100"],
        result = array.map(s => parts.includes(s));
        
    console.log(result);

    【讨论】:

      【解决方案3】:

      使用正则表达式

      var arr = ["3", "3-1", "3-15", "3-", "3-10", "3-100"];
      var reg = /^3(-100)?$/;
      var result = arr.reduce((acc, val, ind) => {
        acc[ind] = reg.test(val);
        return acc;
      }, []);
      console.log(result);

      【讨论】:

      • 这帮助我得到了更明确的答案。谢谢普拉森。
      • const test = '3.100'.split('-');常量 testRegEx = ^${test[0]}$|^${test[0]}-${test[1]}$; var temp = new RegExp(testRegEx); const testResult = temp.test(docNodetoLinkTo.id);
      猜你喜欢
      • 1970-01-01
      • 2015-01-11
      • 2018-04-12
      • 1970-01-01
      • 2017-11-14
      • 1970-01-01
      • 2013-06-22
      • 2023-01-06
      • 1970-01-01
      相关资源
      最近更新 更多