Łączenie tablic / wyszukiwanie w tablicy tablic

0

Mam napisaną taką funkcję, która wyszukuje i paruje ze są elementy z 3 tablic:

function convertValuesToTableArray(values, months, itemsOrder) {
  
  var result = [];
  
  for (var i = 0; i < itemsOrder.length; i++) {
    result.push([]);
    for (var j = 0; j < months.length; j++) {
      for (var k = 0; k < values.length; k++) {
        if (values[k][1] == itemsOrder[i]) {
          if (values[k][0] == months[j] ) {
            result[i].push(values[k][2]);
            break;
          } 
        } 
      }
    }
  }
  
  result.splice(0, 0, months);
  
  return transpose(result);

Przykładowo:

itemsOrder = ["a", "b"]
months = ["01", "02"]
values = [['01', 'b', 1], 
['02', 'b', 2], 
['01', 'a', 5], 
['02', 'a'. 10]]

czyli w wyniku powinniśmy dostać tablicę

[['01', '02'], [5, 10], [1,2]]

(którą jeszcze na wyjściu transponuje, żeby dostać układ z seriami danych w kolumnach).

I teraz nie bardzo podoba mi się to całe zagnieżdżenie for-ów i if-ów. Czy da się to zrobić prościej i czytelniej? Normalnie tablice przeszukałbym przez indexOf(), ale tu jest tablica tablic.

0

Nie mam bladego pojęcia, co ta funkcja robi. Opisz to może na jakimś schemacie czy coś.
Btw, masz na 100% poważny błąd projektowy, skoro dochodzi do tworzenia takich kwiatków...

0

No dobra, to jeszcze raz - mamy 3 wejściowe tablice, które można przedstawić jako następujące tabele

Tablica "months"
month

"01"
"02"

Tablica "itemsOrder"

itemType

"a"
"b"

Tablica "values"

month itemType value
"01" "b" 1
"02" "b" 2
"01" "a" 5
"01" "a" 10

Funkcja składa to wszystko do kupy, tak że finalnie dostajemy tablice gdzie wartości są umieszczone w osobnej linijce dla każdego "itemType", w takiej kolejności, aby wartości były na pozycji zgodniej z miesiącem którego dotyczą.

Czyli na koniec dostajemy

(month) | "01" | "02"
(a) | 5 | 10
(b) | 1 | 2

Co na koniec transponuje, żeby dostać postać tabeli, którą ładuje do arkusza kalkulacyjnego (to już robi sobie osobna funkcja):

(month) (a) (b)
"01" 5 1
"02" 10 2

Sama funkcja w pierwszej pętli lepi po wszystkich itemType z tabeli itemOrders, potem po kolei po miesiącach i dla każdej takiej kombinacji szuka odpowiadającej jej wartości w tabeli values

Ps. Dla jasności, to jest Google Apps Script dla googlowego akrusza kalkulacyjnego, stąd konieczność składania tego do takiej tabelarycznej tablicy.

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