9

我们有一个这样的循环:

for (var prop in obj) {
   if (obj.hasOwnProperty(prop) {
      // Here need operation only for first iteration (1)
      // Other operations
   }
}

我们如何识别(1)中的第一次迭代?

4

5 回答 5

16

如果可以,请将其移出循环:

do_one_time_thing();
for (var prop in obj) {
   if (obj.hasOwnProperty(prop)) {
      // Other operations
   }
}

否则,设置一个标志,并在第一次迭代后降低它:

var first_iteration = true;
for (var prop in obj) {
   if (obj.hasOwnProperty(prop)) {
      if (first_iteration) {
          do_one_time_thing();
          first_iteration = false;
      }
      // Other operations
   }
}
于 2013-09-21T19:33:27.153 回答
16

你可以使用 forEach

array.forEach((element,index) => {
    if(index==0){
        // first element
        }else{
          // not first element  
        }
      });
于 2017-12-14T09:41:52.943 回答
5

由于没有循环计数器,您需要自己跟踪:

var first = true;

for (var prop in obj) {
   if (obj.hasOwnProperty(prop) {
      if (first) {
        first = false;
        // Here need operation only for first iteration (1)
      }
      // Other operations
   }
}
于 2013-09-21T19:33:16.810 回答
3

假设您不关心第一项是什么,那么您可以使用Object.keys()with.forEach()来避免使用标志。

有了这个,你也不需要使用.hasOwnProperty(),因为Object.keys()它会为你处理。

Object.keys(obj).forEach(function(key, i) {
   if (i === 0) {
      console.log("first", obj[key]);
   }
   console.log(obj[key]);
});
于 2013-09-21T19:46:16.737 回答
3

不能保证以可预测的顺序列出属性(正如其他人所说)。

因此,您可以使用Object.keys将对象属性作为数组获取,对该数组进行排序并获取第一个元素:

var firstProperty = Object.keys(obj).sort()[0];
// firstValue = obj[firstProperty];
于 2013-09-21T19:36:43.997 回答