如何在JavaScript中迭代键数组

How can I iterate through a keyed array in JavaScript?

本文关键字:迭代 数组 JavaScript      更新时间:2023-09-26

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

我有这个代码工作,这是创建完美的数组,数据方面:

    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]被定义…如果我不知道订单号,就没有办法访问它。

我可以单独创建一个订单号数组,但感觉它必须绕很长一段路。如果我只是创建一个编号数组,我如何知道将订单中的项目放入哪个数字?

在你当前的代码中

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);