2013-09-21 36 views
5

Chúng tôi có một vòng lặp như thế này:Làm thế nào để xác định phiên đầu tiên trong một vòng lặp for..in

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

Làm sao chúng ta có thể xác định lặp đầu tiên trong (1)?

+2

Tại sao bạn chỉ cần lặp đầu tiên? Do các thuộc tính không được đảm bảo để được liệt kê theo thứ tự có thể dự đoán được, bạn đang làm gì? –

+0

Tôi muốn đối tượng kiểm tra có ít nhất một thuộc tính hay không. Object.keys - giải pháp tốt nhưng nó không hỗ trợ IE8. Tôi biên dịch url từ đối tượng js - cho phần tử đầu tiên cần thêm '?' delimeter, cho '&' khác. Thứ tự của các phím không quan trọng đối với tôi. – karavanjo

Trả lời

9

Nếu bạn có thể, di chuyển nó ra khỏi vòng lặp:

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

Nếu không, thiết lập một lá cờ, và thấp hơn nó sau lần lặp đầu tiên:

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

Cảm ơn. Tôi không thể di chuyển nó ra khỏi vòng lặp vì tôi cần kiểm tra xem đối tượng có ít nhất một thuộc tính. fardjad đề xuất giải pháp để nhận các thuộc tính của đối tượng. – karavanjo

5

Kể từ khi không có vòng lặp truy cập, bạn cần phải theo dõi này tự hỏi:

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

Cảm ơn. Tôi tự hỏi nếu có một giải pháp mà không cần sử dụng lá cờ? – karavanjo

+1

Bạn sẽ cần cờ * ở đâu đó *. Không biết bạn muốn làm gì ở đó, thật khó để nói nhiều hơn, hoặc để hiểu tại sao lá cờ lại là một vấn đề. –

3

Thuộc tính không được bảo đảm để được liệt kê theo thứ tự có thể dự đoán (như những người khác nói).

Vì vậy, bạn có thể sử dụng Object.keys để có được các thuộc tính đối tượng như một mảng, sắp xếp mảng đó và nhận các yếu tố đầu tiên:

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

Object.keys - giải pháp tốt nhưng nó [không được hỗ trợ trong IE8] (http://kangax.github.io/es5-compat-table/#Object.keys). – karavanjo

1

Giả sử bạn không quan tâm những gì mục đầu tiên, sau đó bạn có thể sử dụng Object.keys() với .forEach() để tránh sử dụng cờ.

Với điều này, bạn cũng không cần phải sử dụng .hasOwnProperty(), bởi vì Object.keys() xử lý điều đó cho bạn.

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

bạn có thể sử dụng foreach

array.forEach((element,index) => { 
    if(index==0){ 
     // first element 
     }else{ 
      // not first element 
     } 
     }); 
Các vấn đề liên quan