Как сравнить 2 строки и если есть хотя бы одно общее слово, то true
есть 4 строки
text1="мама мыла раму [[совсем другую раму]] папу" text2="раму вертолет" text3="другую" text4="[[совсем другую раму]]" нужно сравнить 2 строки и если есть хоть одно совпадающее слово вернуть true. При этом слово в квадратных скобках это целиком одно слово и пробел в нем не считается разделителем слова (скобки это тоже часть слова). То есть сравнивая text1 и text2 мы должны получить true а если text1 и text3 получаем false если text2 и text3 false text1 и text4 true (слова с пробелами всегда в квадратных скобках) наверное мы должны как-то загнать значения в массив |
sovsem-nub,
:-?
var text1="мама мыла раму [[совсем другую раму]] папу",
text2="раму вертолет",
text3="другую",
text4="[[совсем другую раму]]";
function foo(a, b) {
var c = /[^\[\]\s]+|(\[\[[\s\S]*?\]\])/g;
a = a.match(c) || [];
b = b.match(c) || [];
return a.some(function(a) {
return b.some(function(b) {
return b == a
})
})
};
alert(foo(text1,text2)); //true
alert(foo(text1,text3)); //false
alert(foo(text2,text3)); //false
alert(foo(text1,text4)); //true
|
:( вообще не понимаю как это работает
вы берете две строки, переделываете их в 2 массива a и b а потом как-то сравниваете эти массивы через return a.some(function(a) { return b.some(function(b) { return b == a }) }) что такое return b == a ? что такое a.some(function(a) "a" это же массив. b == a вернет true, если они равны, но как в них отдельное слово попало из массива? и тут нет никакого перебора. взяли один элемент из первого, сравнили с элементом из второго. |
Цитата:
https://learn.javascript.ru/array-iteration#every-some |
Спасибо. Много я еще не знаю.
|
sovsem-nub,
тоже самое, может так проще будет понять ...
var text1="мама мыла раму [[совсем другую раму]] папу",
text2="раму вертолет",
text3="другую",
text4="[[совсем другую раму]]";
function foo(a, b) {
var c = /[^\[\]\s]+|(\[\[[\s\S]*?\]\])/g;
a = a.match(c) || [];
b = b.match(c) || [];
for (var i = 0; i < a.length; i++) {
for (var k = 0; k < b.length; k++) {
if (a[i] == b[k]) return true
}
}
return false
};
alert(foo(text1,text2)); //true
alert(foo(text1,text3)); //false
alert(foo(text2,text3)); //false
alert(foo(text1,text4)); //true
|
| Часовой пояс GMT +3, время: 02:32. |