11484 sujets

JavaScript, DOM et API Web HTML5

Pages :
(reprise du message précédent)

edit : je racontais de la marde
Modifié par Gatsu35 (22 Oct 2007 - 03:05)
Ce topic me donne une drôle d'idée que je devrais organiser, quand j'aurai le temps... j'ai déjà dit ça sur un autre forum il y a 6 mois et je n'ai toujours rien fait.
J'ai aussi pensé à la fonction sort mais c'est déjà tenté

Voici une autre solution qui est loin d'être simple, belle et performante Smiley langue


var sentence = ' is the most used script Javascript language in the internet ';

var biggestWord = sentence.split(' ').map(function(){
    if(arguments[0].length > arguments[2][arguments[2].length-1].length){
        arguments[2].push(arguments[0]);
    }
    return arguments[2][arguments[2].length-1];
}).reverse()[0]; 

alert(biggestWord); 
J'ai parcouru en revu toutes les methodes que possede l'objet array, et sort est la seule qui nous permette de faire quelque chose de potable.

peut etre un forEach ? Smiley rolleyes
CyrilCS a écrit :
JVoici une autre solution qui est loin d'être simple, belle et performante Smiley langue

Et surtout loin d'être portable étant donné que "map" n'est pas spécifié dans ECMAScript 3.
Tymlis a écrit :
J'arrive moi aussi à la même réponse que jeje. Je sèche sinon, j'attends la réponse Smiley smile

+1, j'me creuse depuis 7h30 ce matin là Smiley lol
Bonjour,

Shinuza a écrit :

Une closure c'est le fait d'accèder à variable qui est hors du scope d'une fonction, principe de base :

var ok = "doki";

function test() {
	alert(ok);
}



Si je puis me permettre, ça n'est pas tout à fait ça. Un(e ?) closure, c'est une fonction qui est déclarée dans un contexte (par exemple une autre fonction) où des variables le sont également et qui fait appel à ces variables. Mais pas à des variables globales qui, par définition, sont accessibles partout.

Les closures sur wikipédia (en anglais, c'est plus complet).

Sinon, j'ai pas trouvé plus simple que la réponse de Jeje. Smiley cligne
Julien Royer a écrit :

Et surtout loin d'être portable étant donné que "map" n'est pas spécifié dans ECMAScript 3.




if (!Array.prototype.map)
{
  Array.prototype.map = function(fun /*, thisp*/)
  {
    var len = this.length;
    if (typeof fun != "function")
      throw new TypeError();

    var res = new Array(len);
    var thisp = arguments[1];
    for (var i = 0; i < len; i++)
    {
      if (i in this)
        res[i] = fun.call(thisp, this[i], i, this);
    }

    return res;
  };
}




Et comme l'énoncé n'indique pas quelle version de js on a le droit d'utiliser Smiley cligne

Je vois pas d'autre solution que d'utiliser sort ou map, un indice ? Smiley biggrin [/i][/i]
Aller, je participe, mais plutôt pour la solution la plus moche. J'ai pas trouvé plus tarabiscoté :
    var sentence = "Javascript is the most used scripts language in the internet";

    var biggestWord = (sentence.indexOf(' ') + '-' +
          sentence.replace(' ', function(str, offset, s) {
                return ' ' + (
                    (sentence.indexOf(' ', offset + 1) == -1 ? s.length : sentence.indexOf(' ', offset + 1)) - offset - 1) + '-';
          }, 'g')).split(' ').sort(function() {
              return parseInt(arguments[1]) - parseInt(arguments[0]);
          }).shift().split('-').pop();

          alert(biggestWord);

Marche pas sous IE Smiley bawling
Lanza a écrit :
Bonjour,



Si je puis me permettre, ça n'est pas tout à fait ça. Un(e ?) closure, c'est une fonction qui est déclarée dans un contexte (par exemple une autre fonction) où des variables le sont également et qui fait appel à ces variables. Mais pas à des variables globales qui, par définition, sont accessibles partout.

Les closures sur wikipédia (en anglais, c'est plus complet).

Sinon, j'ai pas trouvé plus simple que la réponse de Jeje. Smiley cligne


C'est pour ça que je précisais que c'est le principe de base, dans l'absolu, une variable qui existe dans le contexte global n'est pas bindée à une quelconque scope, du coup, elle ne peut pas faire partie d'une closure.

cf : http://www.jibbering.com/faq/faq_notes/closures.html

Julien Royer a écrit :

Et surtout loin d'être portable étant donné que "map" n'est pas spécifié dans ECMAScript 3.


Comme dis dans l'énoncé, on peut utiliser n'importe qu'elle version de javascript. Smiley lol
Modifié par Shinuza (23 Oct 2007 - 15:50)
Shinuza a écrit :
Comme dis dans l'énoncé, on peut utiliser n'importe qu'elle version de javascript. Smiley lol

Je serais d'avis de se limiter à l'ecma-262...
Shinuza a écrit :
Comme dis dans l'énoncé, on peut utiliser n'importe qu'elle version de javascript. Smiley lol

Je n'avais pas vraiment interprété l'énoncé comme ça. Smiley smile
Modérateur
Bonjour

plutot bricoleur que programmeur et avec des connaissance bien maigre , j'ai une solution a partir d'un tableau qui semble fonctionné.
<script type="text/javascript" >
var sentence = "er Javascript is the most used jjjjjjjjjjj script language in the internet";
//var biggestWord = ?;
var temp = new Array();
temp = sentence.split(' ');
//on initialise la variable 
var biggestWord = temp[0];
//on parcours le tableau
var Tableau = temp;
     for (var mot = 0; mot < Tableau.length;mot++)
     {
// si plus grand on remplace
if ( temp[mot].length > biggestWord.length) 
{biggestWord=temp[ mot];}
}

document.write(biggestWord);
</script>


J'espere ne pas etre a coté de la plaque.

GC
Modifié par gcyrillus (23 Oct 2007 - 16:53)
Jeje à trouvé la réponse,

Il existe un peu plus court, mais ce n'est pas basé sur map : Map modifie l'array Smiley langue
Maintenant que je connais les règles, je tente :
var biggestWord = sentence.split(" ").reduce(function(prev, cur) { return cur.length > prev.length ? cur : prev});
+1 pour la solution avec reduce. J'ai pas voulu utiliser les fonctions de JS1.6, mais j'aurais fait comme ça.
FlorentG a écrit :
+1 pour la solution avec reduce. J'ai pas voulu utiliser les fonctions de JS1.6, mais j'aurais fait comme ça.

En fait, 1.8 pour être précis. Smiley biggol
Julien Royer a écrit :
Maintenant que je connais les règles, je tente :
var biggestWord = sentence.split(" ").reduce(function(prev, cur) { return cur.length > prev.length ? cur : prev});

Smiley wingol
Pages :