给定一个数组,每次函数调用一次返回一个值

时间:2018-01-18 20:59:24

标签: javascript

给定一个数组,每次函数调用一次返回一个值。我需要创建一个函数,我给出了一个项目数组,我需要一次返回一个值,直到最后一个值。

我查看了一些答案,这是我认为可行的,但这是一个无限循环。

我接近解决方案了吗?我哪里错了?

function functionName() {
  
  var vals =
  ["shot_type","shot_height","shot_angle","framed","scene_depth"];
  for(var i=0; i<vals.length; i++) {
    functionName(vals[i]);
  }
}

functionName(); //expect 'shot type'
functionName(); //expect 'shot height'

4 个答案:

答案 0 :(得分:2)

你可以使用迭代器,但由于我不知道那些我使用的是闭包。

&#13;
&#13;
let functionName = () => {
  let i = -1;
  var vals = ["shot_type","shot_height","shot_angle","framed","scene_depth"];
  
  functionName = () => {
    i++;
    return vals[i];
  }
  
  return functionName();
}

console.log(functionName());
console.log(functionName());
console.log(functionName());
&#13;
&#13;
&#13;

此处i定义在新重新定义的functionName的范围之上,这是新功能保留的i的引用。

答案 1 :(得分:0)

  const functionName = (iter => () => iter.next().value)(vals.values());

这会构建一个迭代器并在IIFE中将其关闭,因此您可以迭代它。

答案 2 :(得分:0)

不是100%肯定你想要“重新开始”,但我回到了最高/ 0。然后Closure调用一个函数来从中获取值。假设至少1。

var functionName = function() {
  var whichone = -1;
  var vals = ["shot_type", "shot_height", "shot_angle", "framed", "scene_depth"];
  this.getvalue = function() {
    whichone++;
    if (whichone === vals.length) {
      whichone = 0;
    }
    return vals[whichone];
  };
  return this;
}();

console.log(functionName.getvalue()); //expect 'shot type'
console.log(functionName.getvalue()); //expect 'shot height'
console.log(functionName.getvalue());// angle
console.log(functionName.getvalue());// framed
console.log(functionName.getvalue());//scene_depth
console.log(functionName.getvalue());// back to shot type

答案 3 :(得分:-1)

数组已经是迭代器,所以如果你可以使用迭代器(es6 +),那么你可以这样做:

var vals = ["shot_type","shot_height","shot_angle","framed","scene_depth"];
const iter = vals[Symbol.iterator]();

console.log(iter.next().value);
console.log(iter.next().value);
console.log(iter.next().value);
// And so on.

// The iter.next() method returns an object: {value: any, done: boolean};
// When done is true, then there are no more values to get from the iterator.