2
votes

Comment obtenir l'index du tableau dans Lodash _.each

Je suis novice en JavaScript. J'ai une question

Mon code en Java:

_.each(days, day => {
    //TODO something
})

Comment puis-je écrire ce code en JavaScript avec Lodash _.each ? Je ne trouve pas de variable comme [i] dans le code JavaScript, donc je ne peux pas vérifier la condition [if (days [i]

Mon code en JavaScript:

public void checkArray(int a, int b) {
    int[]days = new int[]{5, 15, 25};
    int[]hours = new int[]{6, 8, 7};
    ArrayList<Interger> result = new ArrayList<>();
    for (int i = 0; i < days.length-1;  i++) {
        if (days[i] < a && b < days[i+1]) {
            result.add(hours[i]);
        } else if (days[i] > a && days[i] < b) {
            result.add(hours[i]);
            if (i > 0) {
                result.add(hours[i-1]);
            }
        }


1 commentaires

Javascript utilise la même syntaxe days [i] pour accéder à un membre du tableau. Pour déclarer le tableau, vous utiliseriez const days = [5, 15, 25];


3 Réponses :


1
votes

De la Documentation Lodash :

Itère des éléments de la collection et appelle iteratee pour chacun élément. L'iteratee est invoqué avec trois arguments: (value, index | clé, collection). Les fonctions Iteratee peuvent quitter l'itération plus tôt renvoyant explicitement false.

_.each obtient une seule collection à itérer comme premier argument, et une fonction "iteratee" pour le deuxième argument. Donc, pour est une bonne option pour vous.

Cependant , si vous souhaitez toujours utiliser lodash , vous pouvez obtenir aide de _range pour créer un tableau d'indices, et ensuite vous pouvez faire quelque chose comme ça:

(en javascript bien sûr)

let days = [5, 15, 25];
let hours = [6, 8, 7];
let result = [];
_.each(_.range(days.length),function(i) {
    if (days[i] < a && b < days[i+1]) {
        result.push(hours[i]);
    } else if (days[i] > a && days[i] < b) {
        result.push(hours[i]);
        if (i > 0) {
            result.push(hours[i-1]);
        }
    }
});


0 commentaires

-2
votes

Vous pouvez utiliser javascript forEach dans le tableau (pas besoin d'utiliser Lodash) et ce sera plus facile dans ReactJS:

var days = [5, 15, 25];
days.forEach((day) => {
                  //do things with the day
                  window.alert(day)
                  });


1 commentaires

Désolé mon pote, je dois utiliser Lodash :)



3
votes

De la documentation de Lodash:

Itère les éléments de la collection et invoque iteratee pour chaque élément. Le iteratee est invoqué avec trois arguments: (valeur, index | clé, collection) . Les fonctions Iteratee peuvent quitter l'itération plus tôt en renvoyant explicitement false .

Cela signifie que vous pouvez simplement faire:

var days = [5, 15, 25];
var hours = [6, 8, 7];
var result = [];

_.each( days, function( day, i ){
    if( days[i] < a && b < days[i+1] ){ // days[i] == day
        result.push( hours[i] );
    } else if( days[i] > a && days[i] < b ){
        result.push( hours[i] );
        if( i > 0 ){
            result.push( hours[i-1] );
        }
    }
})

Donc tout votre code devient:

_.each( days, function( day, i ){

});

Voici un jsFiddle à tester.


0 commentaires