Wie kartesisches Produkt vermeiden?


phwert

Erfahrenes Mitglied
#1
Hallo,

ich habe zwei Arrays, beide sind aufsteigend sortiert.
In zwei geschachtelten Schleifen soll ermittelt werden, welche Werte im zweiten Array mit dem gleichen Buchstaben beginnen wie die Werte im ersten Array.
Also A... zu A..., B... zu B... etc.
Wenn im zweiten Array ein anderer (höherer) Buchstabe erkannt wird, soll die zweite Schleife beendet werden - also kein kartesisches Produkt - und in der ersten Schleife der nächste Wert verarbeitet werden.
Wie verhindere ich, dass ein kartesisches Produkt (m:n) verarbeitet wird?

Gruß

Code:
console.clear();
var size = [
  //'S',
  //'M',
  'G',
  'YL',
  'XXL',
  'H',
  'W',
  'B'
];
size.sort();
var color = [
  //'Red',
  //'Blue',
  'Cyan',
  'Yellow',
  'Green',
  'White',
  'YXX--White',
  'X--White',
  'H--White',
  'Black'
];
color.sort();
var myArr = [
];
var temp = [
];
var x;
for (var i = 0; i < size.length; i++) {
  for (var j = 0; j < color.length; j++) { // Kartesisches Produkt
    console.log(size[i] + ' - ' + color[j]);
    if (size[i].substr(0, 1) == color[j].substr(0, 1)) {
      temp.push(color[j]);
    }
  }
  myArr.push([size[i],
  temp]);
  temp = [
  ];
}
for (var i = 0; i < myArr.length; i++) {
  for (var j = 0; j < myArr[i].length; j++) {
    if (typeof myArr[i][j] == 'string') {
      console.log('->' + myArr[i][j]);
      x = myArr[i][j];
    } else if (typeof myArr[i][j] == 'object' && Array.isArray(myArr[i][j])) {
      for (var k = 0; k < myArr[i][j].length; k++) {
        console.log('--->' + myArr[i][j][k]);
      }
    }
  }
}
 
Zuletzt bearbeitet:

phwert

Erfahrenes Mitglied
#2
Hat sich erledigt. Ich hatte irgendwo gelesen, dass Break bei For-Loops nicht möglich ist, was aber offenbar nicht richtig ist.
Habe also diese Zeile hinzugefügt:
Code:
if (size[i].substr(0, 1) < color[j].substr(0, 1)) {break}