我一直在努力解决这个问题:
for( var key in obj ){
blah.blah()
if(choice){
doThis();
}
}
如何仅在最后一项中拨打doThis()
?由于我没有计数器,i
,我无法确定哪个是最后一项。
答案 0 :(得分:8)
首先,钥匙没有任何保证顺序。根据规范,密钥是无序的。如果你真的想用你得到的最后一把钥匙做什么,你可以这样做;
var lastkey;
for( var key in obj ){
lastkey = key;
blah.blah()
}
if(choice){
// use lastkey if you want
doThis();
}
答案 1 :(得分:1)
有一点需要注意,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 closure)。如果它是一个数组,你会免费获得它,然后您可以使用[].map(function(){...})
或.forEach(function(){...})
,这就是框架的foreach(object)
等效项有用的原因;它们通常也会使用.hasOwnProperty过滤掉“原型垃圾”。)
答案 2 :(得分:0)
您提供的代码将被翻译为:
for( var key in obj ){
blah.blah()
}
doThis();
如果这不起作用,请在您的问题中解释原因。