2016-06-23 36 views
1

Ich benutze this online tool, um meinen Code zu egglify, obwohl ich grunt-uglify verwenden, um den gleichen aber gleichen Fehler mit diesem auch zu tun, Es funktioniert gut, um den Code zu minimieren, aber wenn ich Bewerten Sie diesen Code, es gibt einen Fehler von expected : zurück. da es nicht für verschachtelte if-else Fall funktioniert.Uglify kann nicht für verschachtelte if-else arbeiten

Beispielcode.

$._ext_ILST = { 
    changeColorLabel: function() { 
     spots = app.documents[0].spots; 
     var colorLabelArray = new Array(); 
     for (var i = 0; i < spots.length; i++) { 
      try { 
       if (spots[i].toString() !== "[Spot]") { 
        if (spots[i].name.indexOf('$') == 0) { 
         colorLabelArray.push(spots[i].name.substring(1, spots[i].name.length)); 
        } 
       } 
      } catch (e) {} 
     } 

     var colorInfo = getColorInfromation(); 
     var obj = {} 
     if (colorInfo.length > 0) 
      colorLabelArray = []; 
     for (var i = 0; i < colorInfo.length; i++) { 
      colorLabelArray.push(colorInfo[i].colorName); 
      if ((colorInfo[i].hasOwnProperty('colorType') && colorInfo[i].colorType != "teamColorVariable")) { 
       if (colorInfo[i].isGarmentColor) { 
        obj[colorInfo[i].colorName] = "G" 
       } else { 
        obj[colorInfo[i].colorName] = "D" 
       } 
      } else if (!colorInfo[i].hasOwnProperty('colorType')) { 
       if (colorInfo[i].isGarmentColor) { 
        obj[colorInfo[i].colorName] = "G" 
       } else { 
        obj[colorInfo[i].colorName] = "D" 
       } 
      } 
     } 
     var mainColorObj = { 
      colorLabelArray: colorLabelArray, 
      colorMapArray: obj 
     } 
     return JSON.stringify(mainColorObj); 
    } 
} 

minimierte ouput -

$._ext_ILST = { 
    changeColorLabel: function() { 
     spots = app.documents[0].spots; 
     for (var a = new Array, b = 0; b < spots.length; b++) try { 
      "[Spot]" !== spots[b].toString() && 0 == spots[b].name.indexOf("$") && a.push(spots[b].name.substring(1, spots[b].name.length)) 
     } catch (c) {} 
     var d = getColorInfromation(), 
      e = {}; 
     d.length > 0 && (a = []); 
     for (var b = 0; b < d.length; b++) a.push(d[b].colorName), d[b].hasOwnProperty("colorType") && "teamColorVariable" != d[b].colorType ? d[b].isGarmentColor ? e[d[b].colorName] = "G" : e[d[b].colorName] = "D" : d[b].hasOwnProperty("colorType") || (d[b].isGarmentColor ? e[d[b].colorName] = "G" : e[d[b].colorName] = "D"); 
     var f = { 
      colorLabelArray: a, 
      colorMapArray: e 
     }; 
     return JSON.stringify(f) 
    } 
}; 

Jede Hilfe geschätzt wird.

Danke, Upendra Sengar

Antwort

0

Sie sollten lint your JS first.

Hier ist ein Post-lint (und leicht modifizierte) Version des Codes:

/* globals app, $, getColorInfromation */ 

(function(app, $, JSON, undefined) { 
    $._ext_ILST = { 
     changeColorLabel: function() { 
      var spots = app.documents[0].spots; 
      var colorLabelArray = []; 
      var i; 
      for (i = 0; i < spots.length; i++) { 
       try { 
        if (spots[i].toString() !== "[Spot]") { 
         if (spots[i].name.indexOf('$') === 0) { 
          colorLabelArray.push(spots[i].name.substring(1, spots[i].name.length)); 
         } 
        } 
       } catch (e) {} 
      } 

      var colorInfo = getColorInfromation(); 
      var obj = {}; 
      if (colorInfo.length > 0) 
       colorLabelArray = []; 
      for (i = 0; i < colorInfo.length; i++) { 
       colorLabelArray.push(colorInfo[i].colorName); 
       if ((colorInfo[i].hasOwnProperty('colorType') && colorInfo[i].colorType != "teamColorVariable")) { 
        if (colorInfo[i].isGarmentColor) { 
         obj[colorInfo[i].colorName] = "G"; 
        } else { 
         obj[colorInfo[i].colorName] = "D"; 
        } 
       } else if (!colorInfo[i].hasOwnProperty('colorType')) { 
        if (colorInfo[i].isGarmentColor) { 
         obj[colorInfo[i].colorName] = "G"; 
        } else { 
         obj[colorInfo[i].colorName] = "D"; 
        } 
       } 
      } 
      var mainColorObj = { 
       colorLabelArray: colorLabelArray, 
       colorMapArray: obj 
      }; 
      return JSON.stringify(mainColorObj); 
     } 
    }; 
}(app, $, JSON)); 

Bitte beachte, dass ich wrapped your code in an IIFE Sie besser Verhäßlichung Ergebnisse. Beachten Sie auch, dass ich nur Ihren Code topisch überarbeitet habe ... es gibt mehr, was Sie meiner Meinung nach tun könnten, um es besser zu machen (z. B. Klammern um if Aussagen, ich persönlich mag explizit hoist all my vars, etc.).

Als nächstes googelte ich schnell für eine online minification/uglification tool und kopierte/klebte die abgefeuerte Version Ihres Codes; hier ist das Ergebnis:

!function(o,r,e,a){r._ext_ILST={changeColorLabel:function(){var r,a=o.documents[0].spots,n=[];for(r=0;r<a.length;r++)try{"[Spot]"!==a[r].toString()&&0===a[r].name.indexOf("$")&&n.push(a[r].name.substring(1,a[r].name.length))}catch(t){}var l=getColorInfromation(),c={};for(l.length>0&&(n=[]),r=0;r<l.length;r++)n.push(l[r].colorName),l[r].hasOwnProperty("colorType")&&"teamColorVariable"!=l[r].colorType?l[r].isGarmentColor?c[l[r].colorName]="G":c[l[r].colorName]="D":l[r].hasOwnProperty("colorType")||(l[r].isGarmentColor?c[l[r].colorName]="G":c[l[r].colorName]="D");var m={colorLabelArray:n,colorMapArray:c};return e.stringify(m)}}}(app,$,JSON); 

nicht sicher, ob das, was Sie suchen, und/oder wenn der Code noch funktioniert, aber hoffentlich, dass Sie in der richtigen Richtung bringt?