for()的最后一个循环?

时间:2012-04-13 02:03:55

标签: javascript

我一直在努力解决这个问题:

for( var key in obj ){
    blah.blah()
    if(choice){
         doThis();
    }
}

如何仅在最后一项中拨打doThis()?由于我没有计数器,i,我无法确定哪个是最后一项。

3 个答案:

答案 0 :(得分:8)

首先,钥匙没有任何保证顺序。根据规范,密钥是无序的。如果你真的想用你得到的最后一把钥匙做什么,你可以这样做;

var lastkey;
for( var key in obj ){
    lastkey = key;
    blah.blah()
}
if(choice){
    // use lastkey if you want
    doThis();
}

答案 1 :(得分:1)

有一点需要注意,jfriend00在他的回答中提到钥匙没有保证顺序,这里是最普遍的改造:

  • 任意for循环
  • 任意while循环
  • 基于回调的任意迭代器,如[].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();

如果这不起作用,请在您的问题中解释原因。