javascript генерирует комбинации массивов объектов javascript - PullRequest
0 голосов
/ 26 декабря 2011

как найти декартово произведение одинаковых массивов? (проблема рукопожатия).

Я нашел функции cart_prod () и cartesianProductOf (), которые работают нормально, но когда я делаю:

cart_prod (list1, list1)

вместо того, чтобы давать мне массив размера (n ^ 2 + n) / 2, я получаю массив размером n ^ 2. В основном это возвращает мне все перестановки вместо комбинаций. Я пересекаю два списка, потому что это похоже на рукопожатие.

вот функция cartesianProductOf ():

function cartesianProductOf() {
//better cartesian function
//usage: cartesianProductOf([1,2],[3,4],[5,6]) returns 8 arrays [1,3,6],[1,3,5] and so on.
  return Array.prototype.reduce.call(arguments, function(a, b) {
    var ret = [];
    a.forEach(function(a) {
      b.forEach(function(b) {
        ret.push(a.concat([b]));
      });
    });
    return ret;
  }, [[]]);
}

1 Ответ

0 голосов
/ 27 декабря 2011

Не нужно быть здесь причудливым ... вы можете решить это с помощью цикла for. (Трюк заключается в обеспечении порядка я

for(var i=0; i<arr.length. i++){
    for(var j=i+1; j<arr.length; j++){
        //do something with the i-th and j-th elements of the array
    }
}

Кстати, декартово произведение равно предполагается , чтобы дать N ^ 2 элемента в приведенном вами примере. И это я

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...