如何识别for..in循环中的第一次迭代

时间:2013-09-21 19:30:54

标签: javascript

我们有这样的循环:

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

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

5 个答案:

答案 0 :(得分:12)

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

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
   }
}

答案 1 :(得分: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
   }
}

答案 2 :(得分:4)

你可以使用forEach

array.forEach((element,index) => {
    if(index==0){
        // first element
        }else{
          // not first element  
        }
      });

答案 3 :(得分:3)

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

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

var firstProperty = Object.keys(obj).sort()[0];
// firstValue = obj[firstProperty];

答案 4 :(得分:2)

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

有了这个,您也不需要使用.hasOwnProperty(),因为Object.keys()会为您处理。{/ p>

Object.keys(obj).forEach(function(key, i) {
   if (i === 0) {
      console.log("first", obj[key]);
   }
   console.log(obj[key]);
});