给定一个数组,每次函数调用一次返回一个值。我需要创建一个函数,我给出了一个项目数组,我需要一次返回一个值,直到最后一个值。
我查看了一些答案,这是我认为可行的,但这是一个无限循环。
我接近解决方案了吗?我哪里错了?
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'
答案 0 :(得分:2)
你可以使用迭代器,但由于我不知道那些我使用的是闭包。
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;
此处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.