Więc co mam, to trzy (lub więcej) tablicy z różnymi rozmiarami czegoś takiego:

a ['x1' , 'x2', 'x3'];
b ['y1','y2']
c ['z1']

Chcę utworzyć ciąg taki jak następujący:

x1,y1,z1 - x2,y2 - x3 

Jakiś pomysł, jak logika stoi w ten sposób?

1
Jack 5 październik 2011, 03:07

3 odpowiedzi

Najlepsza odpowiedź

Tylko dlatego, że lubię być sprzecznie (kto to uderzył!), Oto alternatywa przy użyciu równiny dla pętli:

var data = [
    ['q1','q2'],
    ['x1', 'x2', 'x3'],
    ['y1', 'y2', 'y3', 'y4', 'y5'],
    ['z1']
];

var result = [];

for (var i=0, iLen=data.length; i<iLen; i++) {
  temp = data[i];

  for (var j=0, jLen=temp.length; j<jLen; j++) {

    if (!result[j]) {
      result.push([temp[j]]);
    } else {
      result[j].push(temp[j]);
    }
  }
}
alert(result.join(' - ')); // q1,x1,y1,z1 - q2,x2,y2 - x3,y3 - y4 - y5

Jeśli wymagana jest wsparcie dla rzadkich tablic (tj. Z brakującymi członkami lub wartościami niezdefiniowanych lub null lub cokolwiek), to nie jest zbyt trudne do wdrożenia.

0
RobG 5 październik 2011, 00:33
var arrays = [a, b, c];
var groupings = [];
var idx = 0;

while (true) {
    var items = [];
    for (var i = 0; i < arrays.length; i++) {
        if (arrays[i].length > idx) {
            items.push(arrays[i][idx]);
        }
    }

    if (!items.length)
        break;
    else
        groupings.push(items.join(','));

    idx++;
}

console.log(groupings.join(' - '));
0
Jacob 4 październik 2011, 23:21

Powiedzmy, że masz tablicę tablic dowolnej liczby, możesz użyć takiego kodu tak, aby to iterować:

var data = [
    ['q1', 'q2'],
    ['x1', 'x2', 'x3'],
    ['y1', 'y2', 'y3', 'y4', 'y5'],
    ['z1']
];

var output = "";
var term, j = 0;
while (true) {
    term = [];
    for (var i = 0; i < data.length; i++) {
        if (data[i].length > j) {
            term.push(data[i][j]);
        }
    }
    // if no more terms, then all arrays are exhausted
    // so it's time to break out of the loop
    if (term.length == 0) {
        break;
    }
    if (output) {
        output += " - ";
    }
    output += term.join(",");
    j++;
}
alert(output);

I przykład roboczy tutaj: http://jsfiddle.net/jfriend00/szkbp/

0
jfriend00 4 październik 2011, 23:28