【问题标题】:Compare arrays of sub-string比较子字符串的数组
【发布时间】:2018-04-30 22:34:13
【问题描述】:

如何检查一个字符串数组是否包含存储在另一个字符串数组中的部分单词?

假设我已经声明了这三个数组:

array1 = ["Lorem", "ipsum", "dolor" "sit" "amet"]

array2 = ["Lorem", "ipsum"]

keywords = ["ipsum", "dol"]

当比较array1keywords 时,我想得到类似true 的东西,因为"ipsum""dol"array1 中,但是false,当比较array2keywords 时因为"dol"不在array2

我搜索了一个小时,但我不知道该怎么做......我成功地比较了一个关键字的数组,但没有几个关键字。

【问题讨论】:

  • 关键字应该是["ipsum", "dolor"]吗? (dol -> dolor)
  • 关键字应该是像ipsum这样的词或像ipsu这样的词的一部分

标签: javascript arrays string


【解决方案1】:
  • 对于关键字数组中的每个元素(使用.every()
  • 其他数组中一定有某个元素(使用.some()
  • 包括当前考虑的字符串(使用.includes()

演示:

let array1   = ["Lorem", "ipsum", "dolor", "sit", "amet"],
    array2   = ["Lorem", "ipsum"],
    keywords = ["ipsum", "dol"];

let compare = (a, k) => k.every(s => a.some(v => v.includes(s)));

console.log(compare(array1, keywords));
console.log(compare(array2, keywords));

文档:

【讨论】:

  • 你需要一些吗?
  • @AndrewBone 是的,没有一些我们将如何在关键字项和其他数组中的任何元素之间找到匹配项?
  • 谢谢@MohammadUsman,它对我帮助很大!!!我在问问题之前尝试这样做,但我使用了 2 个循环并且它不是很干净^^
【解决方案2】:

您可以使用Array.every

let contains = keywords.every(k => array1.findIndex(a => a.indexOf(k) > -1) > -1)

【讨论】:

    【解决方案3】:
    function arrayContains(array1,array2){
     var res=0;
     for (var i=0;i<array1.length;i++){
      for (var j=0;i<array2.length;j++){
        if (array1[i]==array2[j])
            res++
       } 
     }
     return res==array2.length//if res is eqaul to array2.length then all elements of array2 are inside array1;
    }
    

    【讨论】:

      【解决方案4】:

      我会使用indexOf 而不是includes,因为includes 在IE 浏览器中不起作用。 Browser compatibility

      let array1   = ["Lorem", "ipsum", "dolor", "sit", "amet"],
          array2   = ["Lorem", "ipsum"],
          keywords = ["ipsum", "dol"];
      
      let compare = (a, k) => k.every(s => a.some(v => v.indexOf(s) !== -1));
      
      console.log(compare(array1, keywords));
      console.log(compare(array2, keywords));

      【讨论】:

      • 谢谢你的提示;)
      • 如果没记错的话,箭头功能在 IE 浏览器中也不起作用。
      【解决方案5】:
      var array1 = ['a','b','c'];
      var array2 = ['g','f','h'];
      
      var keys = ['a','g'];
      
      function checkIfExists(key, arr) {
         if (arr.indexOf(key) != -1) {
           console.log('Key ' + key + ' exists in array');
         } else {
           console.log('Key ' + key + ' does not exists in array');
         } 
      
      }
      
      for (var i = 0; i < keys.length; i++) {
          checkIfExists(keys[i], array1);
      }
      
      for (var i = 0; i < keys.length; i++) {
          checkIfExists(keys[i], array2);
      }
      

      输出:

      键 a 存在于数组中 数组中不存在键 g 数组中不存在键 a 键g存在于数组中

      【讨论】:

      • 我写了keywords.every(k =&gt; array1.indexOf(k) &gt; -1),但它只在关键字是完整单词时才有效,我也想拥有单词的一部分
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-02
      • 1970-01-01
      相关资源
      最近更新 更多