2015-01-16 8 views
5

Wie benutzt man Punktnotation, wenn mir eine Zeichenfolge zur Verfügung gestellt wird?Lösung für jshint "Besser in Punktnotation geschrieben", wenn ich die Nicht-Punktnotation gültig verwende

Ich schreibe einen Code, um eine eckige x-editierbare Art von Steuerelement zu füllen. Ich habe ein Array von Werten, die mit einer String-ID vordefiniert sind, basierend auf dem, was mein Webapi-Service an mich zurückgibt. Es sendet eine Zeichenfolge zurück. Auf der Grundlage dieser Zeichenfolge, wähle ich das Objekt aus dem Array Ich habe mit dem folgende Verfahren vorge definiert:

valuetoshow = myarray['stringFromWebApiCall']; 

JSHINT wirft einen Anfall, weil es mir will Punktnotation verwenden. Ich verstehe, WARUM JSHINT mir das erzählt, und auch ich verstehe, von welchen Zeilen es erzählt, und ich weiß, wenn ich meinen Code zu etwas wie "answers.undergraduate = bigarray" ändere, wird es den jshint reparieren. Ich weiß einfach nicht, was mit dem Zugriff auf das Array mit .notation zu tun ist, wenn ich eine Zeichenfolge im folgenden Code zur Verfügung gestellt.

Gibt es eine Art von Methode in Javascript, die ich eine Zeichenfolge verwenden kann, um etwas in Punktnotation nachschlagen? Ich bin an C# gewöhnt und diese quasi-typisierte seltsame Definition von Variablen, die es schwierig für mich macht, meinen Kopf herum zu wickeln.

  • ['UNDERGRADUATE'] is better written in dot notation.
  • ['GRADUATE'] is better written in dot notation.
  • ['HONORARY'] is better written in dot notation.
  • ['DOCTORATE'] is better written in dot notation.
  • ['MASTERS'] is better written in dot notation.
  • ['UNDEFINED'] is better written in dot notation.

Sollte ich den Fehler zu unterdrücken versuchen? Sollte ich nur eine große hässliche switch-Anweisung auf die api-Ergebnisse schreiben?

Hier ist der eigentliche Code

answers['UNDERGRADUATE'] = [ 
     { 'name': 'Find a job', 'ticked': false, 'hideThisGroup':false, 'checkboxDisabled': false }, 
     { 'name': 'Create a network with STTI members', 'ticked': false, 'hideThisGroup':true, 'checkboxDisabled': false }, 
     { 'name': 'Receive nursing guidance', 'ticked': false, 'hideThisGroup':false, 'checkboxDisabled': false }, 
     { 'name': 'Learn and grow through online continuing nursing education', 'ticked': false, 'hideThisGroup':true, 'checkboxDisabled': false } 
    ]; 

    answers['GRADUATE'] = [ 
     { 'name': 'Find a job', 'ticked': false, 'hideThisGroup':false, 'checkboxDisabled': false }, 
     { 'name': 'Expand your network with STTI members', 'ticked': false, 'hideThisGroup':true, 'checkboxDisabled': false }, 
     { 'name': 'Grow your portfolio', 'ticked': false, 'hideThisGroup':false, 'checkboxDisabled': false }, 
     { 'name': 'Develop advanced leadership skills', 'ticked': false, 'hideThisGroup':true, 'checkboxDisabled': false }, 
     { 'name': 'Stay current on nursing trends', 'ticked': false, 'hideThisGroup':true, 'checkboxDisabled': false }, 
     { 'name': 'Learn and grow through online continuing nursing education', 'ticked': false, 'hideThisGroup':true, 'checkboxDisabled': false } 
    ]; 

    answers['NURSE LEADER'] = [ 
     { 'name': 'Find a job', 'ticked': false, 'hideThisGroup':false, 'checkboxDisabled': false }, 
     { 'name': 'Expand your network with STTI members', 'ticked': false, 'hideThisGroup':true, 'checkboxDisabled': false }, 
     { 'name': 'Grow your portfolio', 'ticked': false, 'hideThisGroup':false, 'checkboxDisabled': false }, 
     { 'name': 'Develop advanced leadership skills', 'ticked': false, 'hideThisGroup':true, 'checkboxDisabled': false }, 
     { 'name': 'Stay current on nursing trends', 'ticked': false, 'hideThisGroup':true, 'checkboxDisabled': false }, 
     { 'name': 'Learn and grow through online continuing nursing education', 'ticked': false, 'hideThisGroup':true, 'checkboxDisabled': false } 
    ]; 

    answers['HONORARY'] = [ 
     { 'name': 'Find a job', 'ticked': false, 'hideThisGroup':false, 'checkboxDisabled': false }, 
     { 'name': 'Expand your network with STTI members', 'ticked': false, 'hideThisGroup':true, 'checkboxDisabled': false }, 
     { 'name': 'Grow your portfolio', 'ticked': false, 'hideThisGroup':false, 'checkboxDisabled': false }, 
     { 'name': 'Develop advanced leadership skills', 'ticked': false, 'hideThisGroup':true, 'checkboxDisabled': false }, 
     { 'name': 'Stay current on nursing trends', 'ticked': false, 'hideThisGroup':true, 'checkboxDisabled': false }, 
     { 'name': 'Learn and grow through online continuing nursing education', 'ticked': false, 'hideThisGroup':true, 'checkboxDisabled': false } 
    ]; 

    answers['DOCTORATE'] = [ 
     { 'name': 'Find a job', 'ticked': false, 'hideThisGroup':false, 'checkboxDisabled': false }, 
     { 'name': 'Expand your network with STTI members', 'ticked': false, 'hideThisGroup':true, 'checkboxDisabled': false }, 
     { 'name': 'Grow your portfolio', 'ticked': false, 'hideThisGroup':false, 'checkboxDisabled': false }, 
     { 'name': 'Develop advanced leadership skills', 'ticked': false, 'hideThisGroup':true, 'checkboxDisabled': false }, 
     { 'name': 'Stay current on nursing trends', 'ticked': false, 'hideThisGroup':true, 'checkboxDisabled': false }, 
     { 'name': 'Learn and grow through online continuing nursing education', 'ticked': false, 'hideThisGroup':true, 'checkboxDisabled': false } 
    ]; 

    answers['MASTERS'] = [ 
     { 'name': 'Find a job', 'ticked': false, 'hideThisGroup':false, 'checkboxDisabled': false }, 
     { 'name': 'Expand your network with STTI members', 'ticked': false, 'hideThisGroup':true, 'checkboxDisabled': false }, 
     { 'name': 'Grow your portfolio', 'ticked': false, 'hideThisGroup':false, 'checkboxDisabled': false }, 
     { 'name': 'Develop advanced leadership skills', 'ticked': false, 'hideThisGroup':true, 'checkboxDisabled': false }, 
     { 'name': 'Stay current on nursing trends', 'ticked': false, 'hideThisGroup':true, 'checkboxDisabled': false }, 
     { 'name': 'Learn and grow through online continuing nursing education', 'ticked': false, 'hideThisGroup':true, 'checkboxDisabled': false } 
    ]; 

    answers['UNDEFINED'] = [ 
     { 'name': 'Find a job', 'ticked': false, 'hideThisGroup':false, 'checkboxDisabled': false }, 
     { 'name': 'Expand your network with STTI members', 'ticked': false, 'hideThisGroup':true, 'checkboxDisabled': false }, 
     { 'name': 'Grow your portfolio', 'ticked': false, 'hideThisGroup':false, 'checkboxDisabled': false }, 
     { 'name': 'Develop advanced leadership skills', 'ticked': false, 'hideThisGroup':true, 'checkboxDisabled': false }, 
     { 'name': 'Stay current on nursing trends', 'ticked': false, 'hideThisGroup':true, 'checkboxDisabled': false }, 
     { 'name': 'Learn and grow through online continuing nursing education', 'ticked': false, 'hideThisGroup':true, 'checkboxDisabled': false } 
    ]; 

    if ($rootScope.constituent != undefined){ 
     if ($rootScope.constituent.InductedAs != undefined) { 
      $scope.constituentPriorities = answers[$rootScope.constituent.InductedAs.toUpperCase()]; 
     } else { 
      $scope.constituentPriorities = answers['UNDEFINED']; 
     } 
    } 
+1

Überprüfen Sie, ob das Objekt über die Eigenschaft verfügt. http://stackoverflow.com/questions/135448/how-do-i-check-if-an-object-has-a-property-in-javascript – Hobbs

+0

Umh ...Der einzige Eigenschaftsname im Code, der die Klammernotation erfordert, ist "NURSE LEADER". Sie können alle anderen mit der Punktnotation schreiben. – Teemu

+1

Sie haben keine _Strings_, Sie haben _primitives_ innerhalb der Klammern. Sie sind fest codiert und werden daher nicht dynamisch erstellt. Wenn Sie eine Variable in den Klammern benötigen, entfernen Sie die Anführungszeichen. Nur Eigenschaftsnamen, die Zeichen außerhalb von '$, _, AZ, az, 0-9 'enthalten, benötigen Klammer-Notation, wenn _hardcoded_, – Teemu

Antwort

11

Gibt es eine Möglichkeit Punktnotation zu verwenden, so etwas wie diese

... Ja zu erreichen?

answers.UNDERGRADUATE = ... 

etc

Zur Klarstellung: Sie müssen das Zeug oben Code, die tatsächliche Erklärung von Daten, wie answers.UNDERGRADUATE zu schreiben. JSHint beschwert sich nicht über diese Zeile:

... answers[$rootScope.constituent.InductedAs.toUpperCase()]; 

Offensichtlich kann diese Zeile nicht mit Punktnotation geschrieben werden. Die Zeilen, über die sich JSHint beschwert, sind die Zeilen, die wörtlich als answers['UNDEFINED'] oder answers['UNDERGRADUATE'] ausgegeben werden. Das sind die Zeilen, die Sie reparieren müssen, um JSHint zum Schweigen zu bringen.

+0

Ich denke, Sie haben die Frage falsch gelesen. Ich kenne den Variablennamen nicht. Seine Dynamik. – CarComp

+1

@CarComp Woher kamen 'UNDERGRADUATE',' GRADUATE', etc? ... – War10ck

+0

Mein Webapi gibt ein riesiges variables Array zurück, wo array.InduucedAs = 'UNDERGRADUATE' etc. – CarComp

Verwandte Themen