Me gustaría construir un buscador de tallas de moda para ayudar al cliente a encontrar su talla correcta.
Ejemplo: La medida del pecho de 78-81cm corresponde a una talla XS.
Ahora, por supuesto, puedo construir una cantidad infinita de matrices, declaraciones if y else, pero esto tiene que ser más elegante de alguna manera.
$('.sub').click(function(){ var brust = $('#brust').val(); var brustxs = ['78','79','80','81']; var brusts = ['82','83','84','85']; var brustm = ['86','87','88','89']; var brustl = ['90','91','92','93','94','95','96','97']; var brustxl = ['98','99','100','101','102']; if( $.inArray(brust, brustxs) !== -1 ) { alert('found in'+' XS'); }else if ( $.inArray(brust, brusts) !== -1 ) { alert('found in'+' S'); }else { alert('nothing'); } }) <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <input label="brustumfang" value="80" type="text" id="brust"> <input type="submit" class="sub">Puede tener un objeto con las definiciones y recorrerlo sin tener que cambiar el código que coincide.
Por ejemplo :
var sizes = { xs: [78,79,81], s: [82,83,84,85] } for( var size in sizes ){ vas sizeArray = sizes[size]; if( $.inArray(brust, sizeArray ) > -1 ) { alert('found in'+ size ); break; //important bit } }o para un mejor rendimiento, puede almacenar los tamaños ordenados como:
var sizes = [ { size: "XS", range:[78,79,80] }, { size: "S", range:[81,82,83] } ]u otra idea sería simplemente almacenar los puntos de ruptura de cada tamaño desde hasta y verificar si el tamaño se ajusta a ese rango como:
var sizes = [ { size: "XS", from: 78, to:80}, { size: "S", from: 81, to:85}, ]; $.each(sizes, function(index,sizeInfo){ //using jQuery each same as foreach for array if( brust>=sizeInfo.from && brust<=sizeInfo.to ){ alert('found in'+ sizeInfo.size ); return false; //in jQuery is same as break; } });En lugar de mantener cada valor en una matriz, lo que puede hacer es mantener una matriz de tamaños que realice un seguimiento del valor mínimo, el valor máximo y la etiqueta. Luego, simplemente puede recorrer los tamaños y encontrar el que coincida (donde el tamaño mínimo es <= brustSize Y max size>= brustSize), así:
let brustSizes = [{min: 78, max: 81, label: 'xs'}, {min: 82, max: 85, label: 's'}, {min: 86, max: 89, label: 'm'}, {min: 90, max: 97, label: 'l'}, {min: 98, max: 102, label: 'xl'}]; function getSize (brustSize) { let size = brustSizes.find(size => size.min <= brustSize && size.max >= brustSize); return size && size.label } console.log(getSize(81)); console.log(getSize(0)); console.log(getSize(84)); console.log(getSize(87)); console.log(getSize(96)); console.log(getSize(98));