如何在Lodash _.each中获取数组索引

时间:2019-01-31 22:46:35

标签: javascript java arrays foreach lodash

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

如何使用Lodash _.each用JavaScript编写此代码?我无法在JavaScript代码中找到像[i]这样的变量,所以无法检查条件[if(days [i]

我的JavaScript代码:

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

3 个答案:

答案 0 :(得分:1)

来自Lodash Documentation

  

迭代集合的元素,并为每个元素调用iteratee   元件。使用三个参数调用iteratee :(值,   索引|键,集合)。 Iteratee函数可能会提前退出迭代   明确返回false。

_.each仅获得一个Collection进行迭代作为第一个参数,而对第二个参数使用函数“ iteratee”。 因此,for是您的理想选择。

但是,如果您仍然想使用lodash,可以从_range获取帮助来创建索引数组,然后可以执行以下操作:< / p>

(当然是用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]);
        }
    }
});

答案 1 :(得分:0)

来自Lodash documentation

  

遍历collection的元素,并为每个元素调用iterateeiteratee由三个参数调用:(value, index|key, collection)。 Iteratee函数可以通过显式返回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进行实验。

答案 2 :(得分:-1)

您可以在数组中使用javascript forEach(无需使用Lodash),并且在ReactJS中会更容易:

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