4

我需要迭代一个对象,但要知道我何时进行最后一次迭代。我怎样才能做到这一点?对象没有“长度”属性,所以我不能只计算迭代次数并将其与长度进行比较。我很想做类似的事情

var len = 0;
for ( key in obj ) {
    len++;
}

var i = 0;
for ( key in obj ) {
    i++;
    var last_iter = (i == len);
    ...
}

有没有更好的办法?

4

3 回答 3

8

您可以使用以下方法找到键的数量:

var n = Object.keys(obj).length

在 ES5 之前的浏览器上,MDN 网站上提供了一个 shim 。

您的问题的可能解决方案是:

var keys = Object.keys(obj);
while (keys.length) {

    var key = keys.shift();
    var value = obj[key];

    if (!keys.length) {
        // this is the last key
    }
}
于 2012-11-01T21:46:59.900 回答
2

如果您需要对最后一个键做某事,您可以简单地将其设置为变量并在循环后使用它。这将节省循环两次。

var key = '';
for (key in obj) {
    //...
}
// Operation with last key...
// obj[key];
于 2012-11-01T21:47:20.670 回答
0
var prev_key = false;
for (key in obj) {
  if(prev_key) {
    <code here>
  }
  prev_key = key;
}
<code here for last key>

如果您可以获取对象的第一个键,则此代码会更好地工作,因此您可以避免 if,但是您不能在 javascript 中可靠地做到这一点(并且仍然在循环中以相同的顺序迭代)。

于 2012-11-01T21:47:37.380 回答