Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Пересечение и разность двух массивов (https://javascript.ru/forum/misc/39212-peresechenie-i-raznost-dvukh-massivov.html)

harold 20.06.2013 19:13

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

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

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

рони 20.06.2013 19:51

harold,
ваши попытки плиз?!

Solonik 20.06.2013 20:04

Могу подсказать есть уже темка на форуме этом думаю поможет Вам http://javascript.ru/forum/misc/2473...massiva-2.html

harold 20.06.2013 20:09

Цитата:

Сообщение от рони
ваши попытки плиз?!

с пересечением что-то получилось

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;
}

но некорректно (

рони 20.06.2013 20:18

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]))

рони 20.06.2013 20:21

harold,
7 строка подумать и будет функция разности

Demath 20.06.2013 20:32

Цитата:

Сообщение от 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;
}

harold 20.06.2013 21:57

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

благодарю, разобрался что исправить.

kletchatii 18.12.2013 02:39

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
    }
};

nerv_ 18.12.2013 21:41

http://sugarjs.com/api/Array/intersect
http://sugarjs.com/api/Array/subtract
http://sugarjs.com/api/Array/union


Часовой пояс GMT +3, время: 04:15.