Как получить индекс массива в Lodash _.each - PullRequest
0 голосов
/ 01 февраля 2019

Я новичок в JavaScript.У меня вопрос

Мой код на Java:

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]);
            }
        }

Как мне написать этот код на JavaScript с помощью Lodash _.each?Я не могу найти переменную типа [i] в ​​коде JavaScript, поэтому не могу проверить условие [if (days [i]

Myкод в JavaScript:

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

Ответы [ 3 ]

0 голосов
/ 01 февраля 2019

Вы можете использовать javascript forEach в массиве (не нужно использовать Lodash), и в ReactJS это будет проще:

var days = [5, 15, 25];
days.forEach((day) => {
                  //do things with the day
                  window.alert(day)
                  });
0 голосов
/ 01 февраля 2019

Из документации Lodash :

Перебирает элементы collection и вызывает iteratee для каждого элемента.iteratee вызывается с тремя аргументами: (value, index|key, collection).Итеративные функции могут выйти из итерации раньше, явно возвращая false.

Это означает, что вы можете просто сделать:

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

});

Таким образом, весь ваш код становится:

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] );
        }
    }
})

Вот jsFiddle для экспериментов.

0 голосов
/ 01 февраля 2019

С Документация Lodash :

Перебирает элементы collection и вызывает iteratee для каждого элемента.Итерируемый вызывается с тремя аргументами: (значение, индекс | ключ, коллекция).Функции Iteratee могут выйти из итерации раньше, явно возвращая false.

_.each получает только одну коллекцию для итерации в качестве первого аргумента и функцию "iteratee" для второго аргумента.Итак, for является хорошим вариантом для вас.

Однако , если вы все еще хотите использовать lodash, вы можете получить справку по _range для создания массива индексов,и тогда вы можете сделать что-то вроде этого:

(в JavaScript, конечно)

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]);
        }
    }
});
...