【问题标题】:How can I iterate through a keyed array in JavaScript? [duplicate]如何遍历 JavaScript 中的键控数组? [复制]
【发布时间】:2013-03-25 21:39:45
【问题描述】:

我需要将具有匹配订单号的表中的行分组,然后遍历分组。

我有这段代码正在工作,它正在创建完美的数组,数据方面:

    var multItems = [];
    // Combine items under orders,
    $('tr.order').each(function(){
        var orderNum = $(this).find('.ordernumber').val();
        if ( ($('tr.order .ordernumber[value="' + orderNum + '"]').length > 1 ) && !(orderNum in multItems) ){
            $('tr.order .ordernumber[value="' + orderNum + '"]').each(function(){
                if (!(orderNum in multItems)){
                    multItems[orderNum] = [];
                }
                multItems[orderNum].push(this);
            });
        }
    });
    // Create new tr with order totals (of each item)
    for (var i = multItems.length - 1; i >= 0; i--) {
        // Code
    };

但它显然创建了一个长度为 0 的数组,其中 multItems = [],但定义了 multItems[orderNumber]...如果我不知道订单号,就无法访​​问它.

我可以单独制作一个订单号数组,但感觉肯定是很长的路要走。如果我只是创建一个编号数组,我怎么知道将订单中的项目弹出到哪个编号?

【问题讨论】:

  • 现在orderNum 是一个字符串,如果可能的话,使用parseInt,或者甚至push(),如果它实际上是一个你正在尝试创建的数字索引数组,将会解决一些问题.
  • @adeno—orderNum 无论如何都会被强制转换为字符串,即使它是一个数字,所以这不是问题。
  • @Damon — 在问题中你有“但multItems[orderNumber] 已定义”但在代码中你有multItems[orderNum],它是什么?

标签: javascript arrays


【解决方案1】:

使用您当前的代码

var orderNum = $(this).find('.ordernumber').val();

其中 val() 返回一个字符串而不是数字。所以当你在做multItems[orderNum] 时,它是一个字符串。

要使当前代码正常工作,您需要使用for in 循环。

for (var prop in multItems) {
    if( multItems.hasOwnProperty( prop ) ) {
        console.log(multItems[prop]);
    }
}

仅供参考:不保证订单。此外,您应该在这里使用对象 {} 而不是数组。


现在您可以做的另一件事是使用 parseInt 将字符串更改为数字,然后您的 for 循环就会神奇地开始工作。 [这里假设ordernumber是一个数值]

var orderNum = parseInt($(this).find('.ordernumber').val(), 10);

【讨论】:

  • 数组索引只是对象属性(即字符串),所以如果orderNum 是一个数字,它无论如何都会被强制转换为字符串。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-26
  • 1970-01-01
  • 2021-12-30
  • 2015-09-15
  • 1970-01-01
  • 2023-01-29
  • 2014-01-13
相关资源
最近更新 更多