implémenter une function each "à la ruby" ?

Le
unbewusst.sein
comment implémenter une function each "à la ruby" ?

par exemple, j'ai une "classe" (enfin un constructeur) qui implemente un
Node qui a des children et je voudrais pouvoir faire qqc comme :

monNode.children.each(function(child) {
// faire qqc avec cet enfant;
});

auriez-vous des refs à ce sujet ?

j'ai bien trouvé <http://jsclass.jcoglan.com/hash.html> "Ruby-style
JavaScript" mais bon c'est trop touffu pour moi, seule la function each
m'intéresse

--
« Quand tu lances la flèche de la vérité,
trempe la pointe dans du miel. »
(Proverbe arabe)
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Bruno Desthuilliers
Le #22268821
Une Bévue a écrit :
comment implémenter une function each "à la ruby" ?

par exemple, j'ai une "classe" (enfin un constructeur) qui implemente un
Node qui a des children et je voudrais pouvoir faire qqc comme :

monNode.children.each(function(child) {
// faire qqc avec cet enfant;
});




Je ne vois pas trop où est ton problème... Exemple simple avec un array:

function each(callback) {
for (var i=0; i < this.length; i++) {
callback(this[i])
}
}


Pour ce qui est du parcours, c'est à toi de le coder selon le type
d'objet...
Pascal
Le #22268811
Une Bévue a écrit :
monNode.children.each(function(child) {
// faire qqc avec cet enfant;
});



Bonjour,

J'avais en mémoire les fonctions JS 1.6 qui augmentent notablement les
méthodes sur les tableaux.

J'ai retrouvé ce lien, qui devrait répondre au problème posé :
- https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/
- chapitre 9 "Working_with_Arrays"
- paragraphe "#Working_with_Array-like_objects"

Il y est question de l'itération sur des faux tableaux (array-like
objects), tels que ceux retournés par l'inspection du DOM, de la
nouvelle méthode de tableau "forEach()" qui contourne cela avec sa
version statique, et de son émulation pour les versions antérieures.

Cordialement,
Pascal
SAM
Le #22268901
Le 6/17/10 4:17 PM, Pascal a écrit :
Une Bévue a écrit :
monNode.children.each(function(child) {
// faire qqc avec cet enfant;
});



Bonjour,

J'avais en mémoire les fonctions JS 1.6 qui augmentent notablement les
méthodes sur les tableaux.

J'ai retrouvé ce lien, qui devrait répondre au problème posé :
- https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/
- chapitre 9 "Working_with_Arrays"
- paragraphe "#Working_with_Array-like_objects"

Il y est question de l'itération sur des faux tableaux (array-like
objects), tels que ceux retournés par l'inspection du DOM, de la
nouvelle méthode de tableau "forEach()" qui contourne cela avec sa
version statique, et de son émulation pour les versions antérieures.



Ha! oui, marrant :

javascript:
var leDom = document.getElementsByTagName('DL'),
leDoc =[];
for(var i=0, n=leDom.length; i<n; i++) leDoc.push(leDom[i].innerHTML);
leDoc.forEach(function(calque) {
alert(calque);
});

avec :

--
sm
unbewusst.sein
Le #22269001
Bruno Desthuilliers
Je ne vois pas trop où est ton problème... Exemple simple avec un array:

function each(callback) {
for (var i=0; i < this.length; i++) {
callback(this[i])
}
}



je pataugeais, c'est tout, j'ai retrouvé entre-temps...

merci !
--
« Quand tu lances la flèche de la vérité,
trempe la pointe dans du miel. »
(Proverbe arabe)
unbewusst.sein
Le #22269011
Pascal
J'ai retrouvé ce lien, qui devrait répondre au problème posé :
- https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/
- chapitre 9 "Working_with_Arrays"
- paragraphe "#Working_with_Array-like_objects"



oui, j'étais justement en train de re-re-lire MDC...

mais j'ai re-trouvé, comme l'indique Bruno, il suffit de faire un
callback, exemple sur un(e) Array :

--- code "qui marche" --------------------------------------------------
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<script>
Array.prototype.each = function(block) {
var l = this.length;
var i = 0;
while(i<l) {
block(this[i]);
i+=1;
}
}
window.onload = init;
function init() {
var array = new Array('zero', 'un', 'deux', 'trois', 'quatre',
'cinq', 'six', 'sept', 'huit', 'neuf', 'dix');
var count = 0;
array.each(function(item) {
log = document.getElementById('log');
log.innerHTML += 'item #'+count+' = ' + item + '<br />';
count += 1;
});
}
</script>
</head>
<body>
<div id='log'></div>
</body>
</html>
------------------------------------------------------------------------

reste + qu'à l'adapter à ma (pseudo) classe NNTPNode...

--
« Quand tu lances la flèche de la vérité,
trempe la pointe dans du miel. »
(Proverbe arabe)
Publicité
Poster une réponse
Anonyme