如何通过比较两个字符串数组获得类似的字符串?

时间:2016-10-05 07:26:27

标签: javascript

我想比较两个字符串数组,如下所示..

var array1 = ["playing cricket", "Reading Books", "Flying"]

var array2 = ["cricket", "Books"]

var array3 = ["common hobbies will insert here"]

所以在这里我得到了两个阵列的共同爱好,比如模糊搜索。

任何人都可以告诉我如何在两种情况下获得这些共同的爱好?

6 个答案:

答案 0 :(得分:2)

Fiddle

尝试类似

的内容
for (i = 0; i < array2.length; i++) {
        for (j = 0; j < array1.length; j++) {
            if (array1[j].toLowerCase().indexOf(array2[i].toLowerCase()) != -1) {
                arra3.push(array1[i]);
            }
        }
    }

答案 1 :(得分:1)

你也可以为这个

创建一个函数
function find_similar_elements(a, b)
{
  var result = [];
  while(a.length>0 && b.length>0){
    if((a[0] > b[0]) || (a[0] < b[0])){
      var min,max; 
      if(a[0].length > b[0].length) {min = b[0]; max=a[0]}
      else{ min = a[0]; max=b[0] }

      if(max.indexOf(min) !== -1){
        result.push(min);
      } 
      a.shift();
      b.shift();

    } else{
      result.push(a.shift())
      b.shift();
    }
  }

  return result;
}

var array1 = ["playing cricket", "Reading Books", "Flying"]

var array2 = ["cricket", "Books"]

var result = find_similar_elements(array1, array2);

答案 2 :(得分:1)

您可以遍历每个数组并比较每次迭代的indexOf。请参阅下面的jsfiddle。

var array1 = ["playing cricket", "Reading Books", "Flying"];

var array2 = ["cricket", "Books"];

var array3 = [];

for (var i = 0; i < array1.length; i++) {
    for (var x = 0; x < array2.length; x++) {
        console.log(array1[i] + ' ' + array2[x] + ': ' + similar(array1[i], array2[x]));
        if (similar(array1[i], array2[x])) {
            array3.push(array1[i] + ' : ' + array2[x]);
        }
    }
}

for(var c = 0; c < array3.length; c++){
document.write(array3[c] + '<br />');
}


function similar(a, b) {
    if (a.indexOf(b) !== -1 || b.indexOf(a) !== -1) {
        return true
    } else {
        return false;
    }
}

答案 3 :(得分:1)

您可以使用Array#forEach并迭代两个数组进行检查。然后收集对象中的常用单词,以防止每个单词中的多个项目。

var array1 = ["playing cricket", "Reading Books", "Flying"],
    array2 = ["cricket", "Books"],
    common = {};

array1.forEach(function (a) {
    var lowerA = a.toLocaleLowerCase();
    array2.forEach(function (b) {
        var lowerB = b.toLocaleLowerCase();
        if (lowerA.indexOf(lowerB) >= 0) {
            common[lowerB] = true;
        }
        if (lowerB.indexOf(lowerA) >= 0) {
            common[lowerA] = true;
        }
    });
});

console.log(Object.keys(common));

另一个原因可能是获取数组的单个单词,为数组编号应用一个位掩码,并从对象中获取公共内容以便记忆。

var items = [["playing cricket", "Reading Books", "Flying"], ["cricket", "Books"]],
    count = {},
    common;

items.forEach(function (a, i) {
    a.forEach(function (b) {
        b.toLocaleLowerCase().split(' ').forEach(function (c) {
            this[c] = (this[c] || 0) | 1 << i;
        }, this);
    }, this);
}, count);

common = Object.keys(count).filter(function (k) {
    return count[k] === (1 << items.length) - 1;
});

console.log(common);
.as-console-wrapper { max-height: 100% !important; top: 0; }

答案 4 :(得分:0)

您可以使用filter和indexOf比较两个数组(array1和array2)并找到常用项:

array1.filter(function(n){return array2.indexOf(n)!= -1;});

答案 5 :(得分:0)

您可以使用Array#filter

array1.filter(function(commonHobby) {
    for(var i = 0;i < array2.length;++i) {
        if(commonHobby.toLowerCase().indexOf(array2[i].toLowerCase()) !== -1) return true;
    }
});

在ES7中,您可以将其缩短为:

array1.filter(commonHobby => array2.find(hobby => commonHobby.toLowerCase().includes(hobby.toLowerCase())));