0

我有一个包含整数和字符串索引的数组。

出于某种原因,似乎 $.each 没有正确地迭代字符串索引。

下面的输出是:

编号:0 1 2 3

编号:1 4 5 6

编号:2 7 8 9

// 实际 idx: 3 a b c

// 预期 idx: abc 10 11 12

这是我测试的代码:

<html>
<head>
    <title>jQuery - each</title>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
    <script type="text/javascript">

        $(document).ready(function () {

            var a = new Array();
            a.push(0);
            a[0] = [1, 2, 3];

            a.push(1);
            a[1] = [4, 5, 6];

            a.push(2);
            a[2] = [7, 8, 9];

            a.push("abc");
            a["abc"] = [10, 11, 12];

            $.each(a, function (idx, v) {

                alert("idx: " + idx);
                alert(v[0]);
                alert(v[1]);
                alert(v[2]);
            });
        });

    </script>
</head>
<body>
</body>

非常感谢您的帮助,

理查德·休斯

4

3 回答 3

2

javascript中没有字符串索引数组,你需要使用object。

        var a = {};
        a[0] = [1, 2, 3];
        a[1] = [4, 5, 6];
        a[2] = [7, 8, 9];
        a["abc"] = [10, 11, 12];

        $.each(a, function (idx, v) {

            alert("idx: " + idx);
            alert(v[0]);
            alert(v[1]);
            alert(v[2]);
        });
于 2012-05-30T08:34:54.953 回答
2

像这样更改您的代码:

 $(document).ready(function () {

        var a = {};
        a['0'] = [1, 2, 3];
        a['1'] = [4, 5, 6];
        a['2'] = [7, 8, 9];
        a['abc'] = [10, 11, 12];

        $.each(a, function (idx, v) {
            console.log("idx %s : %s, %s, %s", idx, v[0], v[1], v[2]);
        });
  });

这将返回

idx 0 : 1, 2, 3
idx 1 : 4, 5, 6
idx 2 : 7, 8, 9
idx abc : 10, 11, 12

请注意,当您使用字符串作为索引时,您的数据结构是一个对象(而不是数组)

于 2012-05-30T08:34:04.800 回答
0

Jquery $.each 迭代对象的属性或数组,而不是两者。 jQuery

jQuery.each( collection, callback(indexInArray, valueOfElement) )
collection: The object or array to iterate over.
于 2012-05-30T08:38:27.937 回答