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

发布于 2025-02-04 06:12:12 字数 2214 浏览 1 评论 0原文

我有一个功能(当前),因为闭合,我会记住它在函数调用上返回(从数组)返回的最后一个索引,然后从下一个索引返回下一个值。

  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)} />
     }
  )}

I have a function (which currently) because of a closure will remember the last index it returned (from an array) on a function call and return the next value from the next index.

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

What I am doing is I'm passing into the function an array of degrees of a circle:

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

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

What i'd like is to pass in another array which is a range of distances of meters:

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

What I want is the current degree value to increment when we have returned have applied each distance to every degree.

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

So degree should behave like:

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

I tried:

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

But that didn't work. Any help would be appreciated!

UPDATE
Might be helpful to see the context of what this will eventually do:

I have markers I'd like to add to a circle on a map from the center outwards. Thee markers should be laid down along degrees I choose:

 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)} />
     }
  )}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文