我一直在挣扎了一会儿:for()中的最后一个循环?
for(var key in obj){
blah.blah()
if(choice){
doThis();
}
}
如何,我只在最后一个项目叫doThis()
?由于我没有柜台,i
,我无法确定哪个是最后一个项目。
我一直在挣扎了一会儿:for()中的最后一个循环?
for(var key in obj){
blah.blah()
if(choice){
doThis();
}
}
如何,我只在最后一个项目叫doThis()
?由于我没有柜台,i
,我无法确定哪个是最后一个项目。
首先,钥匙不保证顺序。通过规范,密钥是无序的。如果你真的想用你最后一把钥匙做点什么,你可以这样做;
var lastkey;
for(var key in obj){
lastkey = key;
blah.blah()
}
if(choice){
// use lastkey if you want
doThis();
}
+1很好的使用'lastKey',因为如果'var'改变为'let',那么在循环之后只用'key'依赖于'var'的块范围的缺乏。 – 2012-04-13 02:18:59
你给的代码将被转换为:
for(var key in obj){
blah.blah()
}
doThis();
如果这不起作用,请解释为什么在你的问题。
随着该jfriend00在他的回答中提到需要提醒的是钥匙不保证顺序来,这里是最普遍的转变,以增加:
[].forEach
在环形块的核心,我们的变量isLast
将true
如果它是最后一个,或者false
如果不是:
var toDo = function(){};
forOrWhile(...) {
toDo(false);
toDo = function(isLast) {
// blah.blah(); console.log('visited key '+key+' with value '+obj[key]+' where isLast='+isLast)
};
}
toDo(true)
(如果您需要捕获迭代器的值,则需要像平常一样在JavaScript中封闭(Google for javascript for loop for closed)。如果它是一个Array,你可以免费得到这个,那么你可以使用[].map(function(){...})
或.forEach(function(){...})
,这就是为什么框架的foreach(object)
等价物是有用的;他们通常也会通过.hasOwnProperty过滤掉“原型垃圾”。)
有没有理由不使用interator'i'? – Marc 2012-04-13 02:07:30
我正在循环一个对象。 (')':( – 2012-04-13 02:08:09
)中没有定义'i'是否有任何理由需要在循环中调用'doThis'?key的值将是循环的最后一个键的值完成,你知道,因为你使用'var'而不是'let' – 2012-04-13 02:16:56