【问题标题】:How to check if one element of an array matches another element in same array?如何检查数组的一个元素是否与同一数组中的另一个元素匹配?
【发布时间】:2017-02-10 06:26:14
【问题描述】:

对 javascript 非常陌生,所以请多多包涵... 我需要检查包含字符串的数组(arr [1])的一个元素与同一数组的另一个元素(arr [0]),以确定元素arr [1]中是否包含任何字母[0]。这些字母可以是任何顺序,大写或小写,并且不必出现相同的次数(即 arr[0]="hheyyy" 和 arr[1]="hey" 很好)。这就是我所拥有的(有效的),但我很好奇是否有人有更好/更简单的方法来做到这一点? - 提前致谢。

   function mutation(arr) {
     //splits the array into two separate arrays of individual letters
      var newArr0 = arr.join('').toLowerCase().split('').slice(0,arr[0].length);
      var newArr1 = arr.join('').toLowerCase().split('').slice(arr[0].length);
      var boolArr = [];
     //checks each letter of arr1 to see if it is included in any letter of arr0
      for(var i = 0; i < newArr1.length; i++)
        boolArr.push(newArr0.includes(newArr1[i])); 
     //results are pushed into an array of boolean values
      if (boolArr.indexOf(false) !==-1) 
        return false; //if any of those values are false return false
      else return true;
    }

    mutation(["hello", "hey"]); //returns false

【问题讨论】:

  • This answer 可能会提供一个好的解决方案的想法

标签: javascript arrays


【解决方案1】:

你可以使用正则表达式:

function mutationReg(arr) {
  return !arr[1].replace(new RegExp('['+arr[0].replace(/(.)/g,'\\\\$1')+']', "gi"), '').length;
}

这会用反斜杠转义第二个字符串中的每个字符(因此它不会与正则表达式语法冲突),用方括号括起来,并将其用作第一个字符串的搜索模式。从结果中删除任何匹配项(不区分大小写),以便只剩下第二个字符串中没有出现的字符。因此,结果的长度表明是否成功。将! 应用于它会得到正确的布尔结果。

这可能不是最快的解决方案。

这是另一个使用 Set 以获得良好性能的 ES6 替代方案:

function mutation(arr) {
  var chars = new Set([...arr[0].toLowerCase()]);
  return [...arr[1].toLowerCase()].every (c => chars.has(c));
}

【讨论】:

  • 请注意为您的解决方案的工作原理提供任何解释
  • 添加了解释和替代解决方案。
  • 所以你提供的第一个函数很好用,除了一些选择的情况。例如,mutation(["floor","for"]) 出现错误。然而,mutation(["floorf","for"]) 出现了。同样的模式适用于以 b-f 开头的任何事物,我终其一生都无法弄清楚原因。有任何想法吗? -谢谢
  • 确实,这是错误的。我刚刚纠正了它:内部正则表达式需要更多的反斜杠和g 修饰符。
【解决方案2】:

您可以使用Array.from() 将字符串转换为数组,Array.prototype.every()String.prototype.indexOf() 可以检查转换为数组的字符串中的每个字符是否包含在其他数组元素的字符串中。

var arr = ["abc", "cab"];
                                         
var bool = Array.from(arr[0]).every(el => arr[1].indexOf(el) > -1);

console.log(bool);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-30
    • 1970-01-01
    • 2021-12-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多