Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #21 (permalink)  
Старый 27.08.2013, 16:43
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

function difference(a, b) {
    a = a.split(' ');
    b = b.split(' ');
    var d1 = a.filter(function(i) {return !(b.indexOf(i) > -1);});
    var d2 = b.filter(function(i) {return !(a.indexOf(i) > -1);});
    return d1.concat(d2);
}
alert(difference("Мама мыла очень кривую раму", "Мама долго мыла кривую раму"));
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #22 (permalink)  
Старый 27.08.2013, 16:47
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 12.12.2012
Сообщений: 1,398

Началось, кто короче) Я только-только 1-й вариант прожевал)

Спасибо

Вы не подскажете, как знаки препинания тоже в отдельные элементы массива положить? Потому что иначе с ними тоже косяк.

С регулярками, увы, не дружу совсем.
Ответить с цитированием
  #23 (permalink)  
Старый 27.08.2013, 17:01
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

function difference(a, b) {
    var re = /([~!$%^&*()_+|`\-=\\\[\]{};':",\.\/<>?@#])/g;
    a = a.replace(re, ' $1').split(' ');
    b = b.replace(re, ' $1').split(' ');
    var d1 = a.filter(function(i) {return !(b.indexOf(i) > -1);});
    var d2 = b.filter(function(i) {return !(a.indexOf(i) > -1);});
    return d1.concat(d2);
}
alert(difference("Мама! мыла очень кривую раму", "Мама? долго мыла кривую раму"));
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #24 (permalink)  
Старый 27.08.2013, 17:05
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 12.12.2012
Сообщений: 1,398

devote,
Спасибо большое!
Ответить с цитированием
  #25 (permalink)  
Старый 27.08.2013, 17:17
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

tsigel,
Обратите внимание indexOf и filter не доступны в IE до IE9.
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #26 (permalink)  
Старый 27.08.2013, 17:19
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

вот полифил filter:
if (!Array.prototype.filter) {
  Array.prototype.filter = function(fun /*, thisp*/) {
    'use strict';

    if (!this) {
      throw new TypeError();
    }

    var objects = Object(this);
    var len = objects.length >>> 0;
    if (typeof fun !== 'function') {
      throw new TypeError();
    }

    var res = [];
    var thisp = arguments[1];
    for (var i in objects) {
      if (objects.hasOwnProperty(i)) {
        if (fun.call(thisp, objects[i], i, objects)) {
          res.push(objects[i]);
        }
      }
    }

    return res;
  };
}

И соответственно indexOf:
if (!Array.prototype.indexOf) {
  Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {
    'use strict';
    if (this == null) {
      throw new TypeError();
    }
    var n, k, t = Object(this),
        len = t.length >>> 0;

    if (len === 0) {
      return -1;
    }
    n = 0;
    if (arguments.length > 1) {
      n = Number(arguments[1]);
      if (n != n) { // shortcut for verifying if it's NaN
        n = 0;
      } else if (n != 0 && n != Infinity && n != -Infinity) {
        n = (n > 0 || -1) * Math.floor(Math.abs(n));
      }
    }
    if (n >= len) {
      return -1;
    }
    for (k = n >= 0 ? n : Math.max(len - Math.abs(n), 0); k < len; k++) {
      if (k in t && t[k] === searchElement) {
        return k;
      }
    }
    return -1;
  };
}
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #27 (permalink)  
Старый 27.08.2013, 17:37
Аватар для Demath
Профессор
Отправить личное сообщение для Demath Посмотреть профиль Найти все сообщения от Demath
 
Регистрация: 22.06.2012
Сообщений: 168

Сообщение от devote
вот полифил filter:
...

И соответственно indexOf:
...
Страшно , а вот преимущества в данном случае не очевидны (во всяком случае для меня).
Ответить с цитированием
  #28 (permalink)  
Старый 27.08.2013, 17:52
Аватар для Serg_pnz
Сам по себе
Отправить личное сообщение для Serg_pnz Посмотреть профиль Найти все сообщения от Serg_pnz
 
Регистрация: 09.06.2009
Сообщений: 963

оффтоп: winmerge изобретаем, понятно...
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Пересечение и разность двух массивов harold Общие вопросы Javascript 9 18.12.2013 21:41
как сделдать меню из двух калонок как в bestchange.ru Андрей Лебедев Элементы интерфейса 2 21.01.2013 10:32
Сравнение двух дат fAmOus Элементы интерфейса 1 21.08.2012 16:27
Сравнение двух строк drac0Sha Общие вопросы Javascript 17 20.08.2012 19:45
MySQl дата между двух дат mycoding Серверные языки и технологии 8 14.02.2011 15:23