我想比较两个字符串数组,如下所示..
var array1 = ["playing cricket", "Reading Books", "Flying"]
var array2 = ["cricket", "Books"]
var array3 = ["common hobbies will insert here"]
所以在这里我得到了两个阵列的共同爱好,比如模糊搜索。
任何人都可以告诉我如何在两种情况下获得这些共同的爱好?
答案 0 :(得分:2)
尝试类似
的内容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())));