我有多个对象,如下面的那个,我想知道将它们全部放在一个数组中的正确语法是什么。我也想知道如何正确循环遍历所有数组。
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
等多个数组的较大数组,那么这样做的正确方法是什么?
答案 0 :(得分:4)
将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];
}
}
}
答案 1 :(得分:1)
以下函数输出作为参数给出的(可能)无限数组中的每个值。
function printInfiniteArray(value){
if (value instanceof Array){
for(i=0;i<value.length;i++){
printInfiniteArray(value[i]);
}
} else {
console.log(value);
}
}
已编辑的代码。谢谢jtfairbank
答案 2 :(得分:0)
您的数组不包含其他数组。它包含对象。你可以试试这个循环。
for(var i = 0; i < verbMap.length; i++)
{
var obj = verbMap[i];
alert("Object #"+ i " - infinitive: " + obj.infinitive);
}
答案 3 :(得分:0)
您可以将数组视为任何其他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可以有一些不需要的行为。有关详细信息,请参阅Why is using "for...in" with array iteration a bad idea?。
答案 4 :(得分:0)
您可以使用jQuery.each循环浏览数组或对象,而无需检查它是哪一个。一个简单的递归函数,用于在嵌套结构中循环键值对,而不知道确切的深度:
var walk = function(o) {
$.each(o, function(key, value) {
if (typeof value == 'object') {
walk(value);
} else {
console.log(key, value);
}
});
}