Как сравнить 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, время: 05:40. |