【问题标题】:Find unique value in at least two strings在至少两个字符串中找到唯一值
【发布时间】:2011-09-17 11:25:58
【问题描述】:

如果我有 10 个不同的字符串,并且我想查找是否至少有 2 个包含一些值......那逻辑是什么?

所有“和”都不起作用,所有“或”也不起作用

下面的行不通...

这只有在每个人都有价值时才有效......

if(str1 && str2 && str3 && str4 && str5 && str6 && str7 && str8 && str9 && str10) 

如果只有一个值,这将是正确的......需要至少为 2

if(str1 || str2 || str3 || str4 || str5 || str6 || str7 || str8 || str8 || str10)

有什么简单的方法吗?

编辑:更多信息...

将有十个长字符串,我需要对它们进行分块并检查(例如)第一个字符是否相同,然后检查第二个字符是否相同等,但我可以稍后添加所有额外的“charcode at”内容。相同的答案将适用于检查全长字符串并查找两个是否相同。

【问题讨论】:

  • 你有10个变量还是一个数组?在 lattr 情况下,一个简单的循环就可以了(假设“控制值”是恒定的)。只需计算成功比较的次数,看看是否 >= 2。
  • 您想测试它们是否包含某些值(即不是未定义或空字符串),还是两个具有特定的预定值?
  • 会有十个长字符串,我需要对它们进行分块并检查(例如)第一个字符是否相同,然后检查第二个字符是否相同等.
  • @gravityboy:也就是说,你想检查至少两个字符串是否相等?
  • 我认为你必须提供一个具体的例子。你有什么样的琴弦?哪两个字符串会被视为“包含某些值”?

标签: javascript string logic


【解决方案1】:

将所有字符串放入一个数组中,比如 myArray 并计算具有该值的字符串,看看 count 是否大于或等于 2

var count = 0;
for (var index=0; index<myArray.length; index++) {
 if(myArray[index].indexOf(value) != -1) {count++;}
 if(count==2) break;
 }
if(count==2){alert("atleast 2 have value");}
else {alert("Less than 2 have value");}

【讨论】:

    【解决方案2】:

    将每个字符串添加到一个数组中,然后迭代该数组,每次找到匹配项时递增一个计数器:

    var val = "search string here";
    var arr = [str1, str2, str3, str4, str5, str6, str7, str8, str9, str10];
    
    var matches = 0;
    for (var i = 0; i < arr.length; i++) {
      if (arr[i].indexOf(val) > -1 && ++matches >= 2) break;
    }
    
    if (matches >= 2) {
      alert("validates");
    } else {
      alert("failed");
    }
    

    【讨论】:

    • 为了提高性能,您希望在找到 2 后立即中断循环。无需继续计数。
    • 好建议。已实施。
    【解决方案3】:

    有点不清楚你在问什么。如果要检查至少两个字符串是否相互重复,则应执行以下操作:

    function duplicatesExist (array) {
       var hash = {};
       for ( var i = 0 ; i < array.length ; i++ ) {
          if ( hash.hasOwnProperty(array[i]) ) return true;
          else hash[array[i]] = true;
       }
       return false;
    }
    
    duplicatesExist([str1, str2, str3, ...]);
    

    【讨论】:

      【解决方案4】:

      创建一个包含十个字符串的数组。创建一个“nonEmptyItemCount”变量(或类似变量)并将其设置为零。循环遍历数组,测试当前项,如果它有一个值增量 nonEmptyItemCount。完成循环后,查看 nonEmptyItemCount >= 2

      【讨论】:

        【解决方案5】:

        要测试非空字符串的数量,很容易构建这些字符串的数组(我们称之为arrayOfStrings)。您可以找到的非空字符串的数量

        arrayOfStrings.filter(function(s) { return s }).length
        

        我希望这就是您想要的。解释一下:filter返回函数返回true的数组的所有元素。过滤器函数获取字符串作为参数。我们只是返回它,当 javascript 将值强制转换为布尔值时,每个空字符串都会评估为 false。这只会在结果中留下非空的。结果数组的长度是您要查找的数字,并将其与所需的最小值进行比较

        【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-11-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-09
        相关资源
        最近更新 更多