数组中的对象

时间:2011-10-05 15:03:59

标签: javascript jquery arrays

我有多个对象,如下面的那个,我想知道将它们全部放在一个数组中的正确语法是什么。我也想知道如何正确循环遍历所有数组。


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等多个数组的较大数组,那么这样做的正确方法是什么?

5 个答案:

答案 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);
        }
    });
}