如何为数组中的每个索引执行函数?

How to execute a function for every index in an array?

提问人:Antonio Pavicevac-Ortiz 提问时间:6/5/2022 最后编辑:Antonio Pavicevac-Ortiz 更新时间:6/5/2022 访问量:139

问:

我有一个函数(目前)由于闭包,它将记住它在函数调用中返回的最后一个索引(来自数组),并从下一个索引返回下一个值。

  function getCurrentValue(values) {
    let index = -1;
    let l = values.length;

    function increment() {
      ++index;
      if (index < l) {
        return values[index];
      } else {
        index = -1;
        ++index;
        return values[index];
      }
    }

    return increment;
  }

我正在做的是将一个圆的度数组传递到函数中:

  let degree = getCurrentValue([0, 315, 270, 225, 180, 135, 90];

  degree() // returns 0
  degree() // returns 315

我想要的是传入另一个数组,这是一个米的距离范围:

distances = [75, 175, 275, 375, 475];

我想要的是当我们返回时将每个距离应用于每个度数时要递增的当前度数值。

 let degree = getCurrentValue([0, 315, 270, 225, 180, 135, 90], [75, 175]);

所以学位应该表现得像:

 degree(); // returns 0;
 degree(); // returns 0;
 degree(); // returns 0;
 degree(); // returns 315;
 degree(); // returns 315;
 degree(); // returns 315;

我试过了:

   function getCurrentValue(values, helper) {
    let index = -1;
    let l = values.length;
    var temp;

    function increment() {
      ++index;
      if (index < l) {
        return values[index]
      } else {
        index = -1;
        ++index;
        return values[index]
      }
    }
    
      if (typeof helper != 'undefined') {
        for (let i = 0; i < helper.length; i++) {
          console.log('temp', temp)
          return temp = values[index];
        }
      }

    return increment;
  }

但这没有用。任何帮助将不胜感激!

更新了解这最终会做什么的上下文可能会有所帮助:

我有标记,我想从中心向外添加到地图上的圆圈中。你的标记应该沿着我选择的度数放置:

 function setMarkerToCenterOfSegment(lat, lng, degree, distance) {
    return GeometryUtil.destination(L.latLng(lat, lng), degree(), distance());
  }

  let degree = getCurrentValue([0, 315, 270, 225, 180, 135, 90], [75, 175, 275, 375, 475]);
  let distance = getCurrentValue([75, 175, 275, 375, 475])

 {markers.length && markers.map((marker, index) => {
   return 
    <Marker
     key={index}
     position={setMarkerToCenterOfSegment(...initRadiusForCircle, degree, distance)} />
     }
  )}
JavaScript 数组函数 编程 闭包

评论

2赞 Bergi 6/5/2022
我不明白你说的“我们已经遍历了距离中的每个值”是什么意思。你能详细说明一下吗?
0赞 Antonio Pavicevac-Ortiz 6/5/2022
对不起,我以为我很清楚我想要的返回值,我会添加更多说明。
0赞 Antonio Pavicevac-Ortiz 6/5/2022
@Bergi 从本质上讲,我不希望度数值递增,直到为距离数组中的每个值放置一个标记。
0赞 Lauren Yim 6/29/2022
我不明白“我们已经回来了,已经将每个距离应用到每个度数”。看起来在调用数组 3 次后从数组返回下一个度数,但是当只有 3 个距离时,为什么是 2 次?我对该功能应该如何工作感到困惑。degree
0赞 Lauren Yim 6/29/2022
此外,我觉得这是一种过于复杂的方法来完成您想要的任务——而不是具有维护内部状态 ( 和 ) 的函数,您可以在函数中使用来确定要使用的程度和距离。这个问题也被标记为函数式编程;请注意,这不是严格意义上的函数式编程,因为它涉及可变状态,并且不是纯函数。degreedistanceindexmarkers.mapdegreedistance

答: 暂无答案