Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

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

5 réponses
Avatar
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)

5 réponses

Avatar
Bruno Desthuilliers
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...
Avatar
Pascal
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
Avatar
SAM
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 :
<http://88.183.202.165/nntp/nntp.html&gt;

--
sm
Avatar
unbewusst.sein
Bruno Desthuilliers wrote:

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)
Avatar
unbewusst.sein
Pascal wrote:

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">
<title>Array() : obj.each()</title>
<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)