2010-06-13 4 views
0

J'ai un jQuery.each(data, foo), où les données sont une chaîne ou une liste de chaînes. Je voudrais savoir s'il existe une fonction utilitaire existante pour convertir la chaîne en liste, ou sinon exécuter foo sur la chaîne. Ainsi, au lieu de la route facile:jQuery.each pour les listes et les non-listes

if (!$.isArray(data)) { 
    foo(0, data); // can't rely on `this` variable 
} else { 
    $.each(data,foo); 
} 

Je me demandais s'il y avait déjà une fonction intégrée de jQuery ou Javascript qui convertir les données à une liste automatiquement, comme ceci:

function convert_to_list(data) { return $.isArray(data) ? data : [data]; } 

$.each(convert_to_list(data), foo); 

curiosité !

Merci d'avoir lu.

Brian

Répondre

1

approche Andy est un bon. Sinon, vous pouvez toujours forcer les données à être un tableau, puis nourrissez jQuery.each

if(typeof data == 'string') { 
    data = [data]; 
} 
jQuery.each(data, foo); 

Une autre option est de toujours envelopper l'entrée dans un tableau quel que soit son type (chaîne ou un tableau), puis aplatir . flatten, comme son nom l'indique, va aplatir les tableaux multi-niveaux à un seul niveau. Donc [["foo", "bar"]] devient ["foo", "bar"]. Le code devient leur:

jQuery.each([data].flatten(), foo); 

bibliothèques Diverses fournissent la méthode Aplatir et pure mise en œuvre JavaScript se trouve here et un autre example au MDC qui aplatit uniquement des tableaux deux niveaux de profondeur.

2

Plutôt que de convertir à un tableau, vous pouvez "lier" la chaîne à l'aide foo.apply() ou .call():

if (!$.isArray(data)) { 
    foo.call(data, 0); // `this` will point to data 
} else { 
    $.each(data,foo); 
} 
Questions connexes