簡體   English   中英

如何檢查數組中的一個元素是否與同一數組中的另一個元素匹配?

[英]How to check if one element of an array matches another element in same array?

javascript的新手,請耐心等待...我需要針對同一數組(arr [0])的另一個元素檢查包含字符串的array(arr [1])的一個元素,以確定是否有字母元素arr [1]中包含的元素包含在arr [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

您可以使用正則表達式:

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM