How to sort layers by 123, instead, abc

I have the script. including the layers of sort in order of abc.

#target "Illustrator"


/**
 * sort layers (with sublayer)
 */


var doc = app.documents[0];
var lay = doc.layers;
var array_primary = [];
for (var i=0, iL=lay.length; i < iL ; i++) {
  if (lay[i].layers.length === 0) {
  array_primary.push( lay[i].name );
  }
  else {
  array_primary.push( lay[i].name );
  var array_secondary = [];
  for (var j=0, jL=lay[i].layers.length; j < jL ; j++) {
  array_secondary.push(lay[i].layers[j].name);
  };
  var result2 = array_secondary.sort( function (a,b) { return a > b });
  // sort sublayers
  sort_layer (lay[i], result2);
  }
};
var result1 = array_primary.sort( function(a,b) { return a > b } );


// sort layers
sort_layer (doc, result1);


function sort_layer (obj, array) {
  for (var ri=0, riL=array.length; ri < riL ; ri++) {
  obj.layers.getByName(array[ri]).zOrder( ZOrderMethod.SENDTOBACK );
  };
}

For example, I layer names:

Layer # 116

Layer # 12

Layer # 117

Layer # 32

Layer n ° 3

This script sorting like:

Layer # 116

Layer # 117

Layer # 12

Layer n ° 3

Layer # 32

But I want to make to increase:

Layer n ° 3

Layer # 12

Layer # 32

Layer # 116

Layer # 117

Please, help me to do right!

Ch ch ch check it out!

The sort function is changed out of the non-numeric characters and then analyse int to be able to sort by the number vs string.

#target illustrator-20
function test(){
  /**
  * sort layers (with sublayer)
  */
  function sortNumeric(a, b){
    a = a.replace(/[^\d]+/g, '');
    b = b.replace(/[^\d]+/g, '');
    return parseInt(a) > parseInt(b);
  };

  var doc = app.documents[0];
  var lay = doc.layers;
  var array_primary = [];
  for (var i=0, iL=lay.length; i < iL ; i++) {
    if (lay[i].layers.length === 0) {
    array_primary.push( lay[i].name );
    }
    else {
    array_primary.push( lay[i].name );
    var array_secondary = [];
    for (var j=0, jL=lay[i].layers.length; j < jL ; j++) {
    array_secondary.push(lay[i].layers[j].name);
    };
    var result2 = array_secondary.sort( sortNumeric);
    // sort sublayers
    sort_layer (lay[i], result2);
    }
  };
  var result1 = array_primary.sort( sortNumeric ); 

  // sort layers
  sort_layer (doc, result1); 

  function sort_layer (obj, array) {
    for (var ri=0, riL=array.length; ri < riL ; ri++) {
    obj.layers.getByName(array[ri]).zOrder( ZOrderMethod.SENDTOBACK );
    };
  }
};
test();

Tags: Illustrator

Similar Questions

Maybe you are looking for