我已经为此苦苦挣扎了一段时间:
for( var key in obj ){
blah.blah()
if(choice){
doThis();
}
}
我怎样才能doThis()
只在最后一个项目上打电话?由于我没有柜台,i
我无法确定最后一项。
我已经为此苦苦挣扎了一段时间:
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();
}
鉴于 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 loopclosure)。如果它是一个数组,您将免费获得它,那么您可以使用[].map(function(){...})
或.forEach(function(){...})
,这就是框架的foreach(object)
等价物有用的原因;它们通常还会使用.hasOwnProperty过滤掉“原型垃圾” 。)
您提供的代码将被翻译为:
for( var key in obj ){
blah.blah()
}
doThis();
如果这不起作用,请在您的问题中解释原因。