jQuery:如何正确遍历对象?

21
我正在尝试使用下面的代码片段循环遍历如下所示的JS对象,同时需要获取索引键和内部对象。我该如何做到这一点呢?因为以下代码不起作用:
({ prop_1:["1", "2"],
 prop_2:["3", "4"]})

我的代码:

$.each(myObject, function(key,valueObj){
    alert(key + "/" + valueObj.toSource() );
});

期望输出:

prop_1 / (["1", "2"])
2个回答

38

你获取的内部对象valueObj是数组,只是它没有.toSource()这个方法(至少跨浏览器不支持),如果你去掉这个方法,就会弹出一个警告:

$.each(myObject, function(key,valueObj){
    alert(key + "/" + valueObj );
});

你可以在这里测试,不要被输出结果仅为以下内容所迷惑:

prop_1/1,2
prop_2/3,4

默认情况下,.toString() 方法应用于数组时,会生成一个以逗号分隔的列表,这就是在 alert() 中看到的内容。例如,如果你改为使用 alert(key + "/" + valueObj[0] );,则会看到以下内容:

prop_1/1
prop_2/3

所以你可以看到你拥有想要的数组,你可以在这里测试


4
您可以使用 for in 循环:
    var myObject = ({ prop_1:["1", "2"], prop_2:["3", "4"]})
    for (var key in myObject) {
       if (myObject.hasOwnProperty(key)) {
           alert(key + "/" + myObject[key]);
        }
     }

2
这也将包括函数,因此如果您不想要它们,请确保使用 typeof 进行过滤。(JavaScript, The Good Parts, 3.7 枚举) - mdup

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接