无法打印javascript数组值

时间:2014-05-01 08:46:05

标签: javascript jquery

var menu_items = 0;

$(".trueol").each(function(){

    menu_items = menu_items + 1;

});

var product_price = new Array(menu_items);

var product_name = new Array(menu_items);

        $(".price").each(function(){
        var i = 0;
            product_price[i] = $(this).data("p");
            document.write(product_price[i]); /*Inner document.write*/
            i++;
        });
         document.write(product_price[2]); /*Outer document.write*/

        $(".menu_product").each(function(){
            var j = 0;
            product_name[j] = $(this).text();
            document.write(product_name[j]); /*Inner document.write*/
            j++;
        });

           document.write(product_name[2]); /* Outer document.write */

这里,内部document.write工作正常,但外部文件打印未定义。 P.S menu_items在迭代后的值为4。问题是什么?

3 个答案:

答案 0 :(得分:1)

问题是您在每次迭代时重置计数器(var i = 0var j = 0)。

只需将.each()与索引一起使用。

// Arrays for your values
var product_price = [];
var product_name = [];

$(".price").each(function(index) {
    product_price.push($(this).data("p"));
    document.write(product_price[index]); /*Inner document.write*/
});

$(".menu_product").each(function(index) {
    product_name.push($(this).text());
    document.write(product_name[index]); /*Inner document.write*/
});

// Outer write
document.write(product_name[2]);

答案 1 :(得分:1)

使用each迭代器索引解释的答案是正确的,但是你的问题太复杂了。您可以简单地将值推送到数组的末尾并错过任何计数......

var product_price = [];
var product_name = [];

$(".price").each(function(){
    var value = $(this).data("p");
    product_price.push(value);
    document.write(value); /*Inner document.write*/
});
document.write(product_price[2]); /*Outer document.write*/

$(".menu_product").each(function(){
    var value = $(this).text();
    product_name.push(value);
    document.write(value); /*Inner document.write*/
});

document.write(product_name[2]); /* Outer document.write */

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/push

如果您需要在任何时候知道数组中的项目数,请使用

product_price.length

product_name.length

另外一个暗示。我假设您使用document.write作为输出数据以进行调试的方法。请尝试使用console.log("text");,然后打开浏览器控制台(通常是F12并转到控制台选项卡)。

答案 2 :(得分:0)

尝试在计数器设置为push()的每次迭代中使用0

var product_name = [],
    product_price = [];

$(".price").each(function(){
    t = $(this).data("p");
    document.write(t); /*Inner document.write*/
    product_price.push(t); // use push here
});
document.write(product_price[2]); /*Outer document.write*/

$(".menu_product").each(function(){
     t = $(this).text();
     document.write(t); /*Inner document.write*/
     product_name.push(t); // use push here
});
document.write(product_name[2]); /* Outer document.write */