2009-08-13 4 views
0

Nous utilisons jQuery sur un projet moins gourmand en interface utilisateur alors que nous avons utilisé ExtJS sur d'autres projets. Peu importe, je suis curieux de savoir si l'une des bibliothèques courantes telles que ExtJS, jQuery, ou d'autres, fournissent un utilitaire pour "élaguer" des objets? Je veux dire par là supprimer des clés si elles ne contiennent pas de valeurs.Est-ce que les frameworks Javascript répandus fournissent un utilitaire pour l'élagage des objets?

J'ai conçu ma propre implémentation (naïve) comme suit, donc ce n'est pas un problème. Encore tout juste curieux car je crois que cela pourrait être utile en général. J'ai googlé pour « jquery objet pruneau » mais aucun résultat semble utile d'examiner si bien sûr, je peux me tromper;)

function pruneObj(obj) { 
    var empty = []; 
    for (var attr in obj) { 
     if (!obj[attr]) { 
      empty.push(attr); //rather than trying to delete the element in place 
     } 
    } 
    for (var i=0, n=empty.length; i<n; i++) { 
     delete(obj[empty[i]]); 
    } 
    return obj; 
} 

Répondre

1

Alors:

var obj = { hasFoo: false, count: 0 } 

serait (après un appel à prunObj(obj)) être juste {}?

Je ne pense pas que n'importe quelle bibliothèque là-bas ferait l'hypothèse des valeurs à considérer comme "vides". C'est une fonction trop destructive/mutative à inclure dans un ensemble standard de fonctions utilitaires.

De nombreuses bibliothèques ou navigateurs incluent une fonctionnalité permettant de filtrer les éléments des baies ne répondant pas à certains critères. Par exemple, filter:

list.filter(function(item){ 
    return !item.foo 
}) 

filtrera articles dans list qui ont un "falsey" value dans la propriété foo.

Modifier:

En plus pensée, undefined semble être considéré comme "vide" à la fois par jQuery et Prototype. fonction de jQuery extend peut faire ce que je pense que vous visez avec undefined, mais avec une syntaxe légèrement différente et sans muter l'argument passé:

A = { hasFoo: false, count: 0, foo: null, bar: undefined }; 
B = jQuery.extend({}, A); // B = { hasFoo: false, count: 0, foo: null } 

Swap "jQuery" avec "Object" pour le prototype équivalent.

+0

Vous avez raison, obj ci-dessus serait juste {} après avoir utilisé ma fonction pruneObj. C'est précisément pourquoi j'ai dit que ma mise en œuvre était naïve;) Merci de me rappeler les fonctions de filtrage des différentes bibliothèques. Cependant filtrent-ils les objets par opposition aux listes que vous indiquez? En tout cas cela me donne un meilleur point de départ pour la recherche, alors merci! –

Questions connexes