Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 20.06.2013, 19:13
Новичок на форуме
Отправить личное сообщение для harold Посмотреть профиль Найти все сообщения от harold
 
Регистрация: 20.06.2013
Сообщений: 8

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

Пересечение двух массивов arr1 и arr2 - элементы, которые присутствуют в обоих массивах.
Разность двух массивов arr1 и arr2 - элементы массива arr1, которых нет в массиве arr2.

В результирующих массивах не должно быть одинаковых элементов, даже если во входных массивах есть одинаковые элементы.
Застрял на этом пункте задания
Ответить с цитированием
  #2 (permalink)  
Старый 20.06.2013, 19:51
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

harold,
ваши попытки плиз?!
Ответить с цитированием
  #3 (permalink)  
Старый 20.06.2013, 20:04
Интересующийся
Отправить личное сообщение для Solonik Посмотреть профиль Найти все сообщения от Solonik
 
Регистрация: 14.06.2013
Сообщений: 29

Могу подсказать есть уже темка на форуме этом думаю поможет Вам Сравнить два массива
Ответить с цитированием
  #4 (permalink)  
Старый 20.06.2013, 20:09
Новичок на форуме
Отправить личное сообщение для harold Посмотреть профиль Найти все сообщения от harold
 
Регистрация: 20.06.2013
Сообщений: 8

Сообщение от рони
ваши попытки плиз?!
с пересечением что-то получилось

function Intersec(arr1,arr2){
 var idx = 0, arr3 = [];

 for (var i = 0; i < arr2.length; i++)
     {
       idx = arr1.indexOf(arr2[i]);
       if (idx >= 0) arr3.push(arr1[i]);
     }

 return arr3;
}

но некорректно (
Ответить с цитированием
  #5 (permalink)  
Старый 20.06.2013, 20:18
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

harold,
почти у вас всё верно кроме 7 строки
function Intersec(arr1,arr2){
 var idx = 0, arr3 = [];

 for (var i = 0; i < arr2.length; i++)
     {
       idx = arr1.indexOf(arr2[i]);
       if (idx >= 0) arr3.push(arr2[i]);
     }

 return arr3;
}
alert(Intersec([1,7,2,8,5,12,45,67],[3,4,5,1,2]))
Ответить с цитированием
  #6 (permalink)  
Старый 20.06.2013, 20:21
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

harold,
7 строка подумать и будет функция разности
Ответить с цитированием
  #7 (permalink)  
Старый 20.06.2013, 20:32
Аватар для Demath
Профессор
Отправить личное сообщение для Demath Посмотреть профиль Найти все сообщения от Demath
 
Регистрация: 22.06.2012
Сообщений: 168

Сообщение от harold
Пересечение двух массивов arr1 и arr2 - элементы, которые присутствуют в обоих массивах.

В результирующих массивах не должно быть одинаковых элементов, даже если во входных массивах есть одинаковые элементы.
Застрял на этом пункте задания
Вот не самый эффективный вариант, но с учётом дублей и кроссбраузерно

function Intersection(A,B)
{
    var M=A.length, N=B.length, C=[];
 
    for (var i=0; i<M; i++)
     { var j=0, k=0;
       while (B[j]!==A[i] && j<N) j++;
       while (C[k]!==A[i] && k<C.length) k++;
       if (j!=N && k==C.length) C[C.length]=A[i];
     }

   return C;
}


Сообщение от harold
Разность двух массивов arr1 и arr2 - элементы массива arr1, которых нет в массиве arr2.
Аналогично пересечению, различие в коде только в одном символе

function Difference(A,B)
{
    var M=A.length, N=B.length, C=[];
 
    for (var i=0; i<M; i++)
     { var j=0, k=0;
       while (B[j]!==A[i] && j<N) j++;
       while (C[k]!==A[i] && k<C.length) k++;
       if (j==N && k==C.length) C[C.length]=A[i];
     }

   return C;
}

Последний раз редактировалось Demath, 19.12.2013 в 05:50.
Ответить с цитированием
  #8 (permalink)  
Старый 20.06.2013, 21:57
Новичок на форуме
Отправить личное сообщение для harold Посмотреть профиль Найти все сообщения от harold
 
Регистрация: 20.06.2013
Сообщений: 8

Demath,
Дзен-трансгуманист,

благодарю, разобрался что исправить.
Ответить с цитированием
  #9 (permalink)  
Старый 18.12.2013, 02:39
Новичок на форуме
Отправить личное сообщение для kletchatii Посмотреть профиль Найти все сообщения от kletchatii
 
Регистрация: 07.04.2012
Сообщений: 6

function someFnName(arr1,arr2){
     /*
      * resultArr1 - общие элементы
      * resultArr2 - элементы отсутствующие в втором массиве
    */
     var resultArr1 = [],
         resultArr2 = [];
         arr1.map(function(elem){
               if( arr2.indexOf( elem ) >= 0 ){
                   resultArr1.push( elem );
               } else
                   resultArr2.push(elem);
          });
    return {
          res1 : resultArr1,
          res2 : resultArr2
    }
};

Последний раз редактировалось kletchatii, 18.12.2013 в 02:49.
Ответить с цитированием
  #10 (permalink)  
Старый 18.12.2013, 21:41
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

http://sugarjs.com/api/Array/intersect
http://sugarjs.com/api/Array/subtract
http://sugarjs.com/api/Array/union
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук

Последний раз редактировалось nerv_, 18.12.2013 в 21:46.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как сделдать меню из двух калонок как в bestchange.ru Андрей Лебедев Элементы интерфейса 2 21.01.2013 10:32
Как найти точки соприкосновения двух объектов в RaphaelJS Fatalityap Библиотеки/Тулкиты/Фреймворки 3 03.08.2012 16:33
Данные из массивов и логика для их вычесления rrkhissamov Общие вопросы Javascript 2 27.01.2012 11:39
MySQl дата между двух дат mycoding Серверные языки и технологии 8 14.02.2011 15:23