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
Trả lời
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. */
}
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.
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
Xe để giải thích phiếu bầu xuống? – Xotic750
Hãy xem ví dụ về dữ liệu json này – Musa
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
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