manipulowanie tablicami w JavaScript

0

Witam forumowiczów,

Próbuję stworzyć nową tablicę, składającą się z elementów z innej tablicy. Problem wydaje się być prosty, ale nie mogę sobie z nim poradzić. Pomóżcie!

tak wygląda moja tablica:

tablica1 = [jeden, dwa, trzy, cztery, piec];

chcę uzyskać tablice zawierającą wszystkie kombinacje elementów z pierwszej tablicy, na zasadzie par:

tablica2 = [[jeden, dwa],[jeden, trzy], [jeden, cztery], [jeden, piec], [dwa, trzy], [dwa, cztery], [dwa, piec], [trzy, cztery], [trzy, piec], [cztery, piec]];

W tablicy 2 mam wszystkie kombinacje par z tablicy pierwszej, wyłączywszy duble, i elementy składające się z 2 tych samych elementów. Dla moich potrzeb, [jeden, dwa] = [dwa, jeden], ale chciałbym mieć porządek i ograniczyć się jedynie do [jeden, dwa]. W tym przypadku [dwa, jeden] byłoby dublem [jeden, dwa], a dubli nie chcemy. Mam nadzieje, ze jasno opisałem problem, wszelkie uwagi mile widziane.

Na chwile obecna mam mało praktyczne i kiepskie rozwiązanie, które wygląda tak:

for (var ii = 0; i < 5; ii++) {
tablica2[ii] = [tablica1[ii], tablcia1[ii + 1]]
}

uzyskuje jakieś tam pary, ale to nie to co che osiągnąć.

Pomóżcie proszę!

0

dzieki winerfresh za linka.

Odnalazlem tam innego linka (https://gist.github.com/3118596), ktory umozliwil mi rozwiazanie mojego problemu.

Oto rozwiazanie:

var tablica1 = ["jeden", "dwa", "trzy", "cztery", "piec"];

function k_combinations(set, k) {
  var i, j, combs, head, tailcombs;

  if (k > set.length || k <= 0) {
  return [];
  }

  if (k == set.length) {
  return [set];
  }

  if (k == 1) {
  combs = [];
  for (i = 0; i < set.length; i++) {
    combs.push([set[i]]);
  }
  return combs;
}

combs = [];
for (i = 0; i < set.length - k + 1; i++) {
  head = set.slice(i, i+1);
  tailcombs = k_combinations(set.slice(i + 1), k - 1);
  for (j = 0; j < tailcombs.length; j++) {
    combs.push(head.concat(tailcombs[j]));
  }
}
return combs;
}


var tablica2 = k_combinations(tablica1, 2);

for (var hh = 0; hh < tablica2.length; hh++) {
    Out(tablica2[hh])}

Funkcja Out wywala na nowe okno przegladarki zawartosc tablicy2.
Oto wynik:

jeden,dwa
jeden,trzy
jeden,cztery
jeden,piec
dwa,trzy
dwa,cztery
dwa,piec
trzy,cztery
trzy,piec
cztery,piec

Czyli dokladnie tak jak chcialem!

dzieki i pozdrawiam!

1 użytkowników online, w tym zalogowanych: 0, gości: 1