[英]Objects within an Array
我有多個對象,例如下面的對象,我想知道將它們全部放在一個數組中的正確語法是什么。 我也想知道如何正確循環遍歷所有數組。
var verbMap = [
{
infinitive: "gehen",
thirdPres: "geht",
thirdPast: "ging",
aux: "ist",
pastPart: "gegangen",
english: "go"
},
{
infinitive: "gelingen",
thirdPres: "gelingt",
thirdPast: "gelang",
aux: "ist",
pastPart: "gelungen",
english: "succeed"
}
];
我知道循環遍歷上述數組的正確方法是:
for(v in verbMap){
for(p in verbMap[v]){
}
}
如果我想遍歷包含多個數組的更大數組,例如verbMap
,那么正確的方法是什么?
只需將verbMap
數組放在另一個數組中即可。
var verbMaps = [verbMap1, verbMap2...]
要理解的關鍵是,您的verbMap是對象文字的數組。 只用
for (k in verbMap)...
用於對象文字。
遍歷數組的正確方法是
for (var i = 0; i < verbMaps.length; i++) {
var currentVerbMap = verbMaps[i];
for (var j = 0; j < currentVerbMap.length; j++) {
var currentHash = currentVerbMap[j];
for (var k in currentHash) {
console.log(k, currentHash[k];
}
}
}
以下函數從(可能)作為參數給出的無限數組中輸出每個值。
function printInfiniteArray(value){
if (value instanceof Array){
for(i=0;i<value.length;i++){
printInfiniteArray(value[i]);
}
} else {
console.log(value);
}
}
編輯的代碼。 謝謝jtfairbank
您的陣列不包含其他陣列。 它包含對象。 您可以嘗試使其循環。
for(var i = 0; i < verbMap.length; i++)
{
var obj = verbMap[i];
alert("Object #"+ i " - infinitive: " + obj.infinitive);
}
您將像對待其他任何JavaScript對象一樣對待數組。
var arrayOfArrays = [];
var array1 = ["cows", "horses", "chicken"];
var array2 = ["moo", "neigh", "cock-adoodle-doo"];
arrayOfArrays[0] = array1;
arrayOfArrays[1] = array2;
您還可以使用javascript的文字表示法創建一個多維數組:
var arrayOfArrays = [ ["meat", "veggies"], ["mmmm!", "yuck!"] ];
要遍歷數組數組,您需要使用嵌套的for循環,如下所示:
for (var i = 0; i < arrayOfArrays.length; i++) {
var myArray = arrayOfArrays[i];
for (var j = 0; j < myArray.length; j++) {
var myData = myArray[0]; // = arrayOfArrays[0][0];
}
}
請勿用於... !!! 那不是它的目的。 在javascript中,For ... in可能會有一些有害行為。 請參閱為什么在數組迭代中使用“ for ... in”是個壞主意? 有關更多詳細信息。
您可以使用jQuery.each遍歷數組或對象,而不必檢查它是哪一個。 一個簡單的遞歸函數,可在不知道確切深度的情況下在嵌套結構中循環鍵值對:
var walk = function(o) {
$.each(o, function(key, value) {
if (typeof value == 'object') {
walk(value);
} else {
console.log(key, value);
}
});
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.