2013-06-21 30 views
17

Nhận dữ liệu json được tổng hợp theo các chỉ mục bằng số. Khi Im trong forloop của tôi, ví dụ, chỉ số có thể bắt đầu ở 1, có nghĩa là trong forloop của tôi một lỗi sẽ xảy ra vì 0 không tồn tại. Làm thế nào để kiểm tra xem một chỉ mục số tồn tại trong mảng javascript?Kiểm tra chỉ mục bằng số trong một mảng javascript

+0

Hãy xem ví dụ về dữ liệu json này – Musa

+1

Làm thế nào có thể một chỉ số * không * tồn tại trong một mảng? Ý của bạn là giá trị của nó là 'undefined', đúng không? – acdcjunior

+1

Vui lòng đăng một ví dụ. Mô tả các vấn đề trong câu hỏi thường khó trả lời mà không có ví dụ cụ thể. – CodeMonkeyKing

Trả lời

27
var a = [1, 2, 3], 
    index = 2; 

if (a[index] !== void 0) { /* void 0 === undefined 
           * See concern about ``undefined'' below. */ 
    /* index doesn't point to an undefined item. */ 
} 
+1

Hoặc 'if (index in a)' sẽ kiểm tra kỹ về sự tồn tại, mặc dù kiểm tra '! == undefined' của bạn sẽ rất có thể là đủ. –

+0

typeof [index]! == 'undefined' sẽ an toàn hơn – Aubin

+3

@Aubin Tại sao? Nếu 'a' không được định nghĩa, nó sẽ không thành công khi cố truy cập' [index] '. – andlrc

6

Bạn sẽ có thể sử dụng for(key in data)

var data = []; 
data[1] = 'a'; 
data[3] = 'b'; 

for(var index in data) { 
    console.log(index+":"+data[index]); 
} 
//Output: 
// 1-a 
// 3-b 

Mà sẽ lặp qua từng hạng mục quan trọng trong dữ liệu nếu các chỉ số không tiếp giáp.

0

Nếu những gì bạn đang thực sự mô tả là một Object chứ không phải là một Array, nhưng là mảng như thế nào trong thực tế là nó có các tính chất đó là của uint32_t nhưng không có cần thiết tài sản length hiện. Sau đó, bạn có thể chuyển đổi nó thành một mảng thực như thế này. khả năng tương thích trình duyệt khôn ngoan này đòi hỏi hỗ trợ của hasOwnProperty

Javascript

function toArray(arrayLike) { 
    var array = [], 
     i; 

    for (i in arrayLike) { 
     if (Object.prototype.hasOwnProperty.call(arrayLike, i) && i >= 0 && i <= 4294967295 && parseInt(i) === +i) { 
      array[i] = arrayLike[i]; 
     } 
    } 

    return array; 
} 

var object = { 
    1: "a", 
    30: "b", 
    50: "c", 
}, 
array = toArray(object); 

console.log(array); 

Output

[1: "a", 30: "b", 50: "c"] `

On jsfiddle

Ok, bây giờ bạn có một mảng dân cư thưa thớt và muốn sử dụng vòng lặp for để làm điều gì đó.

Javascript

var array = [], 
    length, 
    i; 

array[1] = "a"; 
array[30] = "b"; 
array[50] = "c"; 

length = array.length; 
for (i = 0; i < length; i += 1) { 
    if (Object.prototype.hasOwnProperty.call(array, i)) { 
     console.log(i, array[i]); 
    } 
} 

Ouput

1 "a" 
30 "b" 
50 "c" 

On jsfiddle

Ngoài ra, bạn có thể sử dụng Array.prototype.forEach nếu trình duyệt của bạn hỗ trợ nó, hoặc shim sẵn như được đưa ra trên trang MDN mà tôi được liên kết hoặc es5_shim

Javascript

var array = []; 

array[1] = "a"; 
array[30] = "b"; 
array[50] = "c"; 

array.forEach(function (element, index) { 
    console.log(index, element); 
}); 

Output

1 "a" 
30 "b" 
50 "c" 

On jsfiddle

+0

Xe để giải thích phiếu bầu xuống? – Xotic750

Các vấn đề liên quan