Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 19.12.2016, 19:08
Аватар для sovsem-nub
Профессор
Отправить личное сообщение для sovsem-nub Посмотреть профиль Найти все сообщения от sovsem-nub
 
Регистрация: 15.10.2014
Сообщений: 255

Как сравнить 2 строки и если есть хотя бы одно общее слово, то true
есть 4 строки


text1="мама мыла раму [[совсем другую раму]] папу"
text2="раму вертолет"
text3="другую"
text4="[[совсем другую раму]]"


нужно сравнить 2 строки и если есть хоть одно совпадающее слово вернуть true. При этом слово в квадратных скобках это целиком одно слово и пробел в нем не считается разделителем слова (скобки это тоже часть слова). То есть сравнивая

text1 и text2 мы должны получить true
а если text1 и text3 получаем false
если text2 и text3 false
text1 и text4 true (слова с пробелами всегда в квадратных скобках)


наверное мы должны как-то загнать значения в массив
Ответить с цитированием
  #2 (permalink)  
Старый 19.12.2016, 19:43
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

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
Ответить с цитированием
  #3 (permalink)  
Старый 19.12.2016, 20:22
Аватар для sovsem-nub
Профессор
Отправить личное сообщение для sovsem-nub Посмотреть профиль Найти все сообщения от sovsem-nub
 
Регистрация: 15.10.2014
Сообщений: 255

вообще не понимаю как это работает
вы берете две строки, переделываете их в 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, если они равны, но как в них отдельное слово попало из массива?

и тут нет никакого перебора. взяли один элемент из первого, сравнили с элементом из второго.

Последний раз редактировалось sovsem-nub, 19.12.2016 в 20:27.
Ответить с цитированием
  #4 (permalink)  
Старый 19.12.2016, 20:57
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Сообщение от sovsem-nub
и тут нет никакого перебора. взяли один элемент из первого, сравнили с элементом из второго.
тут перебор и есть, сравниваются все элементы первого массива со всеми другого, если хотбы одно сравнение подошло условию, перебор прекращается возвращается true, иначе false.
https://learn.javascript.ru/array-iteration#every-some
Ответить с цитированием
  #5 (permalink)  
Старый 19.12.2016, 22:15
Аватар для sovsem-nub
Профессор
Отправить личное сообщение для sovsem-nub Посмотреть профиль Найти все сообщения от sovsem-nub
 
Регистрация: 15.10.2014
Сообщений: 255

Спасибо. Много я еще не знаю.
Ответить с цитированием
  #6 (permalink)  
Старый 19.12.2016, 23:15
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

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
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не работает AJAX если есть перевод строки pashin76 AJAX и COMET 17 02.10.2013 13:36
как записать <form> с отправкой .. если есть уже <form> с другим обработчиком Arfey Серверные языки и технологии 9 01.06.2010 16:31
Как запустить функцию если результат клика - true Oracool Events/DOM/Window 1 14.04.2010 11:22
можно ли, если да то как удалить строки из таблицы Avaria Я не знаю javascript 3 11.06.2009 03:03
Как сравнить класс, если их много!? Sc@M Events/DOM/Window 16 29.08.2008 12:47