【问题标题】:How to get the array index in Lodash _.each如何在 Lodash _.each 中获取数组索引
【发布时间】:2025-12-27 12:00:09
【问题描述】:

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

【问题讨论】:

  • Javascript 使用相同的语法days[i] 来访问数组成员。要声明数组,您可以使用 const days = [5, 15, 25];

标签: javascript java arrays foreach lodash


【解决方案1】:

来自Lodash Documentation

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

_.each 只获取一个 Collection 作为第一个参数进行迭代,并获取一个函数“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]);
        }
    }
});

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 对不起伙计,我必须使用 Lodash :)
    【解决方案3】:

    来自 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 进行实验。

    【讨论】: