如何在JavaScript中迭代键数组
How can I iterate through a keyed array in JavaScript?
我需要将具有匹配顺序号的表中的行分组,然后遍历分组。
我有这个代码工作,这是创建完美的数组,数据方面:
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);
相关文章:
- 如何在DataTables 2.1中迭代对象数组
- 是否“;对于的“;循环迭代遵循JavaScript中的数组顺序
- 如何在Jquery中迭代JSON数组
- 为什么数组在对象内部迭代对象时存储重复值
- 迭代和修改Firebase数组会导致未定义
- 在对象上迭代以验证它是否's键存在于数组中
- 在JSON数组中进行迭代,并为其元素设置样式
- 我需要迭代一个JSON数组——不知道如何做到——已经搜索过了,但仍然可以'我一点也不知道
- JavaScript:如何在迭代过程中修改数组中的值
- 使用Ruby数组使用JS在视图中进行迭代和显示
- 使用javascript在数组中迭代和映射JSON
- 在数组中迭代时的JS循环位置
- 在可变长度d3的多维数组上迭代
- MVC:使用Web窗体视图引擎在javascript中迭代Viewbag数组
- 如何通过迭代对象数组来删除某些项目
- 如何在 JavaScript 中动态地编写可迭代的函数数组
- 使用节点在 JSON 数组中搜索项目(最好不迭代)
- 使用 promises/dedelay 异步迭代一组文件
- 不能让.offset()方法在迭代一组列表项时工作
- 迭代2个数组并找到匹配,但需要相同的索引