2016-11-28 1 views
-2

EDIT: Nur um zu klären, wie zer00ne entdeckt, das war ursprünglich Code verfälscht, dass ich "verschönert", um es zu ändern. Entschuldigung dafür, das nicht früher klar zu machen.Korrekter Weg zur Einführung von if-Anweisung in eine bestimmte for-Schleife?

Original-for-Schleife, die funktioniert:

m = 0; 
for (k = b.header.length; m < k; m++) d.appendChild(p(e, "col", { 
    attr: { 
     min: m + 1, 
     max: m + 1, 
     width: N(b, m), 
     customWidth: 1 
    } 
})); 

Was ich tun möchte, funktioniert aber nicht:

m = 0; 
for (k = b.header.length; m < k; m++) d.appendChild(p(e, "col", { 
    if (m==6) { 
    attr: { 
     min: m + 1, 
     max: m + 1, 
     width: 100, 
     style: 2, 
     customWidth: 1 
    } 
    } else { 
    attr: { 
     min: m + 1, 
     max: m + 1, 
     width: N(b, m), 
     customWidth: 1 
    } 
    } 
})); 

Ich verstehe, dass die if-Anweisung an der falschen Stelle w.r.t. ist die Funktion d.appendChild, aber ich bin mir nicht sicher, wie man die for-Schleife von der Funktion trennt, um die if-Anweisung in die richtige Position zu bringen. Schließlich, was ist dieser Stil der for-Schleife/Funktion-Hybridisierung genannt?

Hilfe?

+4

* "Schließlich, was ist dieser Stil der for-Schleife/Funktion Hybridisierung genannt" * - Es heißt "eine Wartung Albtraum". Halten Sie sich an die meisten Stilrichtlinien und schreiben Sie 'for (...) {d ...}' mit entsprechenden Zeilenumbrüchen und Einrückungen. Es sollte dann offensichtlicher werden, wo auch die "if" -Anweisung steht. – deceze

+0

Hier gibt es kein Hybrid – charlietfl

+0

Hybridwuh? Hast du nur ein Stück Code genommen und verschönert? – zer00ne

Antwort

4

Es geht nicht um for Schleife, es geht um die Möglichkeit wörtliche if innerhalb Objekt zu verwenden. Kurz gesagt, es gibt keine.

Was Sie tun könnte, ist stattdessen erweitern einen bestimmten param basierend auf Zustand, wie folgt aus:

var m = 0; 
var attr; 
for (var k = b.header.length; m < k; m++) { 
    attr = { 
    min: m + 1, 
    max: m + 1, 
    customWidth: 1 
    }; 
    if (m === 6) { 
    attr.style = 2; 
    attr.width = 100; 
    } 
    else { 
    attr.width = N(b, m); 
    } 
    d.appendChild(p(e, 'col', { attr: attr })); 
} 

Dieser Ansatz ist DRY: die Attribute gemeinsam für beide Fälle werden einmal angegeben (so ist es einfacher, zu modifizieren, Sie).

arbeiten Sie schon mit nur einem abwechslungsreichen param, gäbe es einen anderen Weg, dies zu tun gewesen sein - mit ternären:

attr = { 
    min: m + 1, 
    max: m + 1, 
    width: m === 6 ? 100 : N(b, m), 
    customWidth: 1 
}; 

Dennoch gibt es eine andere Sache zu prüfen: Was 6 ist? Es ist nicht für jeden Leser klar - einschließlich Sie später mehrere Monate (oder sogar Wochen, je nach Größe der Codebasis).

+0

es ist Code, um das XML für eine Excel-Datei zu generieren. "6" bezieht sich in diesem Fall auf eine bestimmte Spalte. – h0dges

1

Öffnen Sie die for-Schleife, setzen die dann innerhalb wenn und legte appendChild in der if-Anweisung:

for (<stuff>) { 
    if (<expression>) { 
     d.appendChild(<stuff>); 
    } 
} 
0

Sie haben die if-Bedingung als Parameter in d.appendChild setzen. Das wird nicht funktionieren:

m = 0; 
for (k = b.header.length; m < k; m++) { 
    if (m==6) { 
     d.appendChild(p(e, "col", { 
     attr: { 
      min: m + 1, 
      max: m + 1, 
      width: 100, 
      style: 2, 
      customWidth: 1 
     } 
     })); 
    } else { 
     d.appendChild(p(e, "col", { 
     attr: { 
      min: m + 1, 
      max: m + 1, 
      width: N(b, m), 
      customWidth: 1 
     } 
     })); 
    } 
} 
Verwandte Themen