如何检查数组中的一个元素是否与同一数组中的另一个元素匹配?

时间:2016-10-01 23:33:15

标签: javascript arrays

非常新的JavaScript,所以忍受我... 我需要检查一个数组的一个元素(arr [1]),它包含一个字符串,对着同一个数组的另一个元素(arr [0]),以确定元素arr [1]中包含的任何字母是否包含在arr中[0]。这些字母可以是任何顺序,大写或小写,并且不必出现相同的次数(即arr [0] =" hheyyy"和arr [1] =&# 34;嘿"很好)。这就是我的(有效),但我很好奇,如果有人有更好/更简单的方法吗? - 提前谢谢。

   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

2 个答案:

答案 0 :(得分:0)

您可以使用正则表达式:

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));
}

答案 1 :(得分:0)

您可以使用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);