仅使用javascript逐个打印关联数组元素

时间:2011-07-05 07:22:03

标签: javascript associative-array

我有这段代码

<script type="text/javascript">
var slideStart = 1;
var slideCount = 4;
function callArr() {
    var arrName = {"rose":"5", "daisy":"4",
                   "orchid":"3", "sunFlower":"10",
                   "Lily":"15"};
    for (var flwr in arrName) {
        if (slideStart <= slideCount) {
            document.getElementById('test').innerHTML += flwr +
                                                         "   >>>>>>>>   " +
                                                         arrName[flwr] +
                                                         "<br />";
            slideStart++;
            break;
        }
    }
}
</script>

我想在任何事件上单独访问数组元素。可以请任何帮助我吗????

5 个答案:

答案 0 :(得分:2)

当然,由于你使用像这样的条件,它只会打印第一个元素

if (slideStart <= slideCount)

修改代码以迭代对象属性。其中一个可能的解决方案:

var slideStart = 0;
var slideCount = 4;
function callArr() {
    var arrName = {"rose":"5", "daisy":"4",
                   "orchid":"3", "sunFlower":"10",
                   "Lily":"15"};
    var i = 0;
    for (var flwr in arrName) {
        if (i == slideStart) {
            document.getElementById('test').innerHTML += flwr +
                                                         "    " +
                                                         arrName[flwr] +
                                                         "<br />";
            slideStart++;
            break;
        }

        i++;
    }
}

在此处试试:http://jsfiddle.net/2nDv8/

如您所见,它会在每次通话后打印下一个属性。

答案 1 :(得分:1)

如果您在任何地方引用访问权限,则可以将其声明为全局变量:

<script type="text/javascript">
var slideStart = 1;
var slideCount = 4;
var arrName = {"rose":"5", "daisy":"4",
                   "orchid":"3", "sunFlower":"10",
                   "Lily":"15"}; //Declare var outside, so it's global
function callArr() {    
    for (var flwr in arrName) {
        if (slideStart <= slideCount) {
            document.getElementById('test').innerHTML += flwr +
                                                         "   >>>>>>>>   " +
                                                         arrName[flwr] +
                                                         "<br />";
            slideStart++;
            //break; //This prevents from showing more. Erase it
        }
    }
}
</script>

另请注意,break语句导致仅显示第一个元素

希望这会有所帮助。干杯

答案 2 :(得分:1)

这与浏览器不完全兼容,但您可以使用Object.keys(arrName)。或者实际创建和存储一个行为相同的数组,如果你真的担心跨浏览器的兼容性。

答案 3 :(得分:0)

它只打印一次,因为你在循环中放了一个"break"。此代码将毫无问题地打印所有元素。您的slideStartslideCount变量也会导致一个问题。如果要打印所有这些内容,请将slideStart更改为0,以便它将打印所有元素,而不仅仅是其中的4个。希望有所帮助:

function callArr() {
    var arrName = {"rose":"5", "daisy":"4",
                   "orchid":"3", "sunFlower":"10",
                   "Lily":"15"};
    for (var flwr in arrName) {
        if (slideStart <= slideCount) {
            document.getElementById('test').innerHTML += flwr +
                                                         "   >>>>>>>>   " +
                                                         arrName[flwr] +
                                                         "<br />";
            slideStart++;
            //break;
        }
    }
}

答案 4 :(得分:0)

这可能就是你想要的。在这里试试:http://jsfiddle.net/Hsn4c/1/

function callArr() {
    var slideStart = 0;
    var slideCount = 4;

    var arrName = {
        "rose": "5",
        "daisy": "4",
        "orchid": "3",
        "sunFlower": "10",
        "Lily": "15"
    };
    for (var flwr in arrName) {
        if (slideStart <= slideCount) {
            document.getElementById('test').innerHTML += flwr + ">>>>>" + arrName[flwr] + "<br />";
            slideStart++;
            //break;
        }
    }
    document.getElementById('test').innerHTML += '==========<br />';
}