如何从闭合功能调用中返回相同的值n次?

发布于 2025-02-04 10:03:00 字数 840 浏览 2 评论 0原文

我想做的是闭合返回相同的值n次数。

let value = getCurrentValue([0, 315, 270, 225, 180, 135, 90], 3);

然后我应该得到:

value() // returns 0
value() // returns 0
value() // returns 0
value() // returns 315
value() // returns 315
value() // returns 315
value() // returns 270
value() // returns 270
value() // returns 270

这是我尝试的!

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

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

    if (num)  {
     for (var i = 0; i < num; i++){
      return increment         
     }
   }


    return increment;
  }

任何帮助将不胜感激!

What I would like to do is have a closure return the same value n amount of times.

let value = getCurrentValue([0, 315, 270, 225, 180, 135, 90], 3);

I should then get:

value() // returns 0
value() // returns 0
value() // returns 0
value() // returns 315
value() // returns 315
value() // returns 315
value() // returns 270
value() // returns 270
value() // returns 270

This is what I tried!

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

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

    if (num)  {
     for (var i = 0; i < num; i++){
      return increment         
     }
   }


    return increment;
  }

Any help would be appreciated!

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

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

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

失而复得 2025-02-11 10:03:00

这是我的解决方案&amp;闭合解决方案

// generator solution
function* getCurrentValueIter(iter, times) {
  for (let i = 0; i < iter.length * times; i++) {
    const cur = Math.floor(i / times);
    yield iter[cur]
  }
}

console.log('generate')
const valueIter = getCurrentValueIter([0, 1], 2)
for (let value of valueIter) {
  console.log(value)
}
// you can also use valueIter manually
// console.log(valueIter.next().value)

// closure solution
function getCurrentValue(iter, times) {
  let i = 0
  function value() {
    while (i < iter.length * times) {
      const cur = Math.floor(i / times);
      i += 1
      return iter[cur]
    }
  }
  return value
}

const value = getCurrentValue([0, 1], 2)
console.log('closure', value())
console.log(value())
console.log(value())
console.log(value())

Here is my generator solution & closure solution

// generator solution
function* getCurrentValueIter(iter, times) {
  for (let i = 0; i < iter.length * times; i++) {
    const cur = Math.floor(i / times);
    yield iter[cur]
  }
}

console.log('generate')
const valueIter = getCurrentValueIter([0, 1], 2)
for (let value of valueIter) {
  console.log(value)
}
// you can also use valueIter manually
// console.log(valueIter.next().value)

// closure solution
function getCurrentValue(iter, times) {
  let i = 0
  function value() {
    while (i < iter.length * times) {
      const cur = Math.floor(i / times);
      i += 1
      return iter[cur]
    }
  }
  return value
}

const value = getCurrentValue([0, 1], 2)
console.log('closure', value())
console.log(value())
console.log(value())
console.log(value())

漫雪独思 2025-02-11 10:03:00

只需使用 itererator 函数。

function* getCurrentValue(arr, count) {
  for (let item of arr) {
    for (let j = 0; j < count; j++) {
      yield item;
    }
  }
}

for (let value of getCurrentValue([0, 315, 270, 225, 180, 135, 90], 3)) 
{
  console.log(value);
}

Simply use an iterator function.

function* getCurrentValue(arr, count) {
  for (let item of arr) {
    for (let j = 0; j < count; j++) {
      yield item;
    }
  }
}

for (let value of getCurrentValue([0, 315, 270, 225, 180, 135, 90], 3)) 
{
  console.log(value);
}

茶底世界 2025-02-11 10:03:00

仅使用闭合 - 跟踪索引和返回函数之外的重复次数,因此值通过呼叫持续存在:

function getCurrentValue(arr, n) {
  let index = 0;
  let repeat = 0;
  
  return function() {
    if (repeat < n) {
      repeat++;
    } else {
      repeat = 1;
      index++;
    }
    
    return arr[index];
  }
}

let value = getCurrentValue([0, 315, 270, 225, 180, 135, 90], 3);


console.log(value()); // returns 0
console.log(value()); // returns 0
console.log(value()); // returns 0
console.log(value()); // returns 315
console.log(value()); // returns 315
console.log(value()); // returns 315
console.log(value()); // returns 270
console.log(value()); // returns 270
console.log(value()); // returns 270
console.log(value()); // returns 225
.as-console-wrapper { max-height: 100% !important; }

如果/else可以通过使用来缩短来增加重复值,然后将其限制为最大值:

function getCurrentValue(arr, n) {
  let index = -1;
  let repeat = -1;
  
  return function() {
    repeat = (repeat + 1) % n;
    if (repeat === 0)
      index++;
    
    return arr[index];
  }
}

let value = getCurrentValue([0, 315, 270, 225, 180, 135, 90], 3);


console.log(value()); // returns 0
console.log(value()); // returns 0
console.log(value()); // returns 0
console.log(value()); // returns 315
console.log(value()); // returns 315
console.log(value()); // returns 315
console.log(value()); // returns 270
console.log(value()); // returns 270
console.log(value()); // returns 270
console.log(value()); // returns 225
.as-console-wrapper { max-height: 100% !important; }

Using just a closure - keep track of the index and the number of repeats outside the returned function, so the values persist through calls:

function getCurrentValue(arr, n) {
  let index = 0;
  let repeat = 0;
  
  return function() {
    if (repeat < n) {
      repeat++;
    } else {
      repeat = 1;
      index++;
    }
    
    return arr[index];
  }
}

let value = getCurrentValue([0, 315, 270, 225, 180, 135, 90], 3);


console.log(value()); // returns 0
console.log(value()); // returns 0
console.log(value()); // returns 0
console.log(value()); // returns 315
console.log(value()); // returns 315
console.log(value()); // returns 315
console.log(value()); // returns 270
console.log(value()); // returns 270
console.log(value()); // returns 270
console.log(value()); // returns 225
.as-console-wrapper { max-height: 100% !important; }

The if/else section can be shortened by using % to increase the repeat value and cap it to the maximum:

function getCurrentValue(arr, n) {
  let index = -1;
  let repeat = -1;
  
  return function() {
    repeat = (repeat + 1) % n;
    if (repeat === 0)
      index++;
    
    return arr[index];
  }
}

let value = getCurrentValue([0, 315, 270, 225, 180, 135, 90], 3);


console.log(value()); // returns 0
console.log(value()); // returns 0
console.log(value()); // returns 0
console.log(value()); // returns 315
console.log(value()); // returns 315
console.log(value()); // returns 315
console.log(value()); // returns 270
console.log(value()); // returns 270
console.log(value()); // returns 270
console.log(value()); // returns 225
.as-console-wrapper { max-height: 100% !important; }

貪欢 2025-02-11 10:03:00

在JavaScript中:

const values = [0, 315, 270, 225, 180, 135, 90];
const rNum = 3;

const getCurrentValue = (values, num) => {
    if (num <= 0) {
        return console.log("Repeater is invalid");
    } else {
        values.map((number) => {
            let repeatingCount = 0;
            while (repeatingCount != num) {
                console.log(number);
                repeatingCount++;
            }
        })
    }
}
getCurrentValue(values, rNum);

In Javascript:

const values = [0, 315, 270, 225, 180, 135, 90];
const rNum = 3;

const getCurrentValue = (values, num) => {
    if (num <= 0) {
        return console.log("Repeater is invalid");
    } else {
        values.map((number) => {
            let repeatingCount = 0;
            while (repeatingCount != num) {
                console.log(number);
                repeatingCount++;
            }
        })
    }
}
getCurrentValue(values, rNum);
风情万种。 2025-02-11 10:03:00
const value = getCurrentValue([0, 315, 270, 225, 180, 135, 90], 3);

function getCurrentValue(arr = [], n = 0) {

  // Return if the array is empty or `n` is 0
  if (!arr.length || !n) return;

  let index = 0;
  let count = 0;
  
  return function () {
  
    // Have we reached the end of the array?
    if (index < arr.length) {
      
      // No? Check to see if our count is less than `n`
      // increment it if it is, and log the number
      if (count < n) {
        ++count;
        console.log(arr[index]);
      
      // Otherwise increase the array index
      // and set `count` to zero
      } else {
        ++index;
        count = 0;
      }
    
    }
  
  }

}

value(),value(),value(),value(),value(),value(),value(),value(),value(),value(),value(),value(),value(),value(),value(),value(),value(),value(),value(),value(),value(),value(),value(),value(),value(),value(),value(),value(),value(),value(),value(),value(),value(),value(),value(),value(),value(),value(),value(),value(),value(),value(),value(),value(),value();

const value = getCurrentValue([0, 315, 270, 225, 180, 135, 90], 3);

function getCurrentValue(arr = [], n = 0) {

  // Return if the array is empty or `n` is 0
  if (!arr.length || !n) return;

  let index = 0;
  let count = 0;
  
  return function () {
  
    // Have we reached the end of the array?
    if (index < arr.length) {
      
      // No? Check to see if our count is less than `n`
      // increment it if it is, and log the number
      if (count < n) {
        ++count;
        console.log(arr[index]);
      
      // Otherwise increase the array index
      // and set `count` to zero
      } else {
        ++index;
        count = 0;
      }
    
    }
  
  }

}

value(),value(),value(),value(),value(),value(),value(),value(),value(),value(),value(),value(),value(),value(),value(),value(),value(),value(),value(),value(),value(),value(),value(),value(),value(),value(),value(),value(),value(),value(),value(),value(),value(),value(),value(),value(),value(),value(),value(),value(),value(),value(),value(),value(),value();

苏辞 2025-02-11 10:03:00

如果我了解得很好,这就是您想要的

    let res = [];
    
    function getCurrentValue(arr, x) {
    res = [];
      for (val of arr) {
        for (let i = 0; i < x; i++) {
          res.push(val);
        }
      }
    }
    getCurrentValue([0, 42, 4], 3)

If I understood well this is what you want

    let res = [];
    
    function getCurrentValue(arr, x) {
    res = [];
      for (val of arr) {
        for (let i = 0; i < x; i++) {
          res.push(val);
        }
      }
    }
    getCurrentValue([0, 42, 4], 3)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文