2012-02-24 31 views
5

thể trùng lặp:
Loop through Json objectVòng Qua Object trong Javascript

{"data":[{"name":"Jen","id":"1"},{"name":"Steve","id":"8"}]} 

Một máy chủ Tôi đang tương tác với phản ứng với bên trên.

Tôi đang cố gắng lặp qua nó cho câu lệnh For..in.

Đây là những gì tôi đang cố gắng để làm:

for (var item in response.data) 
{ 
console.log(item.name); 
} 

này không hoạt động. Điều gì đã xảy ra?

Cảm ơn bạn

tôi GOT IT để làm việc với những điều sau đây sau khi đọc bình luận:

for (var item trong response.data) { console.log (response.data [item] .name); } })

tôi đã có thể để có được một danh sách tên ...

Ai đó có thể phân tích phản ứng là tại sao nó làm việc?

+0

Bạn có chắc chắn đó là JavaScript chứ không phải JSON không? –

+0

Không phải là bản sao thích hợp. Đây là một cấu trúc đối tượng khác với cấu trúc liên kết. –

+1

Không trùng lặp với câu hỏi đó! Ông đang lặp trên mảng! – hugomg

Trả lời

0

Check-out: Why is using "for...in" with array iteration a bad idea?

Đối với ... trong lặp qua tên của các thuộc tính của một đối tượng. Các mục mảng cũng được coi là "thuộc tính", do đó, for..in lặp qua các chỉ mục (trong đó có 0, 1 trong trường hợp của bạn). Như mong đợi khi bạn sử dụng response.data [0] bạn nhận được phần tử đầu tiên của mảng.

+0

Cảm ơn bạn! Bạn đã trả lời câu hỏi của tôi! –

10

data thực sự là một mảng (được biểu thị bằng []), thay vì đối tượng, do đó bạn muốn có vòng lặp for thông thường thay vì for in.

for (var i = 0; i<response.data.length; i++) { 
    // use i as an array index 
    console.log(response.data[i].name); 
} 

Trong JavaScript, các for in xây dựng được sử dụng để lặp qua các thuộc tính đối tượng, nhưng để lặp một mảng một gia tăng cho vòng lặp thường được sử dụng.

+0

Tôi có thể làm cho định dạng trên hoạt động. Tôi chỉ tò mò làm thế nào để làm điều đó với For..in Nhưng Cảm ơn bạn! Điều đó xác nhận tôi –

0

for..in lặp qua các thuộc tính đếm được của một đối tượng không theo thứ tự cụ thể (bạn có thể nhận được thứ tự khác trong các trình duyệt khác nhau). Một mảng chỉ là một đối tượng đơn giản với một phương thức chiều dài đặc biệt và các phương thức tiện dụng được kế thừa từ Array.prototype (một số trong đó phụ thuộc vào thuộc tính độ dài đặc biệt). Không có giới hạn về những gì có thể được sử dụng cho tên thuộc tính, chúng không bị hạn chế đối với số nguyên không âm (lưu ý rằng tên đúng không phải là số nhận dạng hợp lệ, ký hiệu ngoặc vuông phải được sử dụng để truy cập giá trị của nó). Các chỉ số của một mảng chỉ là các tên thuộc tính chuỗi (tức là chúng chỉ là các tên thuộc tính thuần), vì vậy một vòng lặp for..in sẽ lặp qua các chỉ mục số (một lần nữa, không nhất thiết phải tăng dần hoặc giảm dần). đơn đặt hàng) cũng như tất cả các thuộc tính có thể đếm được khác, bao gồm các thuộc tính trên số[[Prototype]]chuỗi. Do đó, nên luôn bao gồm thử nghiệm hasOwnProperty với for..in trừ khi bạn muốn bao gồm các thuộc tính có thể đếm được kế thừa.

Vì lý do trên, nói chung tốt hơn để lặp qua các thuộc tính mảng bằng cách sử dụng bộ đếm từ 0 đến array.length - 1 (vì độ dài luôn lớn hơn chỉ số cuối cùng).

Để kiểm tra "không có thứ tự đặc biệt" tuyên bố, hãy thử những điều sau đây trong IE và trình duyệt khác và lưu ý thứ tự khác nhau:

var a = []; 
a[2] = 2; 
a[0] = 0; 
a[3] = 3; 
var b = []; 
for (var i in a) b.push(a[i]); 
alert(b); 
Các vấn đề liên quan