[英]Why isn't the counter not resetting in my loop?
I have an array of shipments and I am running a loop on the array to find shipments which have more than one package so I can clone them within in a new array. 我有一批货物,并且在阵列上运行一个循环以查找具有多个包裹的货物,因此我可以将它们克隆到一个新阵列中。 I need to process shipping labels which produce one label per object in the array. 我需要处理运输标签,该标签在阵列中每个对象上产生一个标签。
I have added a new key/value pair to show the individual package number from a counter but all my "BAG INDEX" are coming to the same number 我添加了一个新的键/值对以显示计数器中的单个包装号,但是我所有的“袋索引”都使用相同的编号
// Function to sort the concatenated array
function compare( a, b ) {
if ( a["SNAP ID"] < b["SNAP ID"] ){
return -1;
}
if ( a["SNAP ID"] > b["SNAP ID"] ){
return 1;
}
return 0;
}
// Demo shipments array
var shipments = [{
"SNAP ID": "1234567890",
"FULL NAME": "Person 1",
"PACKAGE QTY": 5
},
{
"SNAP ID": "0987654321",
"FULL NAME": "Person 2",
"PACKAGE QTY": 2
},
{
"SNAP ID": "5432167890",
"FULL NAME": "Person 3",
"PACKAGE QTY": 3
}
];
// Empty array which will contain cloned shipment objects
var data = [];
// Running loop on the shipments array
for (var i = 0; i < shipments.length; i++) {
var Pkg = shipments[i]["PACKAGE QTY"]
var shipment = shipments[i]
shipment["BAG INDEX"] = 1
// Running loop on the shipments containing more the 1 packages
if (Pkg > 1) {
for (var k = 0; k < (Pkg - 1); k++) {
data.push(shipment);
shipment["BAG INDEX"] += 1;
};
};
};
var complete = shipments.concat(data);
var sorted = complete.sort(compare);
console.log(sorted);
This is what I am getting back 这就是我回来的
0: {SNAP ID: "0987654321", FULL NAME: "Person 2", PACKAGE QTY: 2, BAG INDEX: 2}
1: {SNAP ID: "0987654321", FULL NAME: "Person 2", PACKAGE QTY: 2, BAG INDEX: 2}
2: {SNAP ID: "1234567890", FULL NAME: "Person 1", PACKAGE QTY: 5, BAG INDEX: 5}
3: {SNAP ID: "1234567890", FULL NAME: "Person 1", PACKAGE QTY: 5, BAG INDEX: 5}
4: {SNAP ID: "1234567890", FULL NAME: "Person 1", PACKAGE QTY: 5, BAG INDEX: 5}
5: {SNAP ID: "1234567890", FULL NAME: "Person 1", PACKAGE QTY: 5, BAG INDEX: 5}
6: {SNAP ID: "1234567890", FULL NAME: "Person 1", PACKAGE QTY: 5, BAG INDEX: 5}
7: {SNAP ID: "5432167890", FULL NAME: "Person 3", PACKAGE QTY: 3, BAG INDEX: 3}
8: {SNAP ID: "5432167890", FULL NAME: "Person 3", PACKAGE QTY: 3, BAG INDEX: 3}
9: {SNAP ID: "5432167890", FULL NAME: "Person 3", PACKAGE QTY: 3, BAG INDEX: 3}
length: 10
You have to create a copy of your object. 您必须创建对象的副本。 Otherwise you will increase the BAG INDEX
for the objects you already added to your data
array as well. 否则,您还将为已经添加到data
数组中的对象增加BAG INDEX
。
Simply use: 只需使用:
data.push(Object.assign({}, shipment));
You need to create a new object in here: 您需要在此处创建一个新对象:
if (Pkg > 1) {
for (var k = 0; k < (Pkg - 1); k++) {
data.push(shipment);
shipment["BAG INDEX"] += 1;
};
};
Otherwise you're just operating on the same shipment object. 否则,您将只对同一个装运对象进行操作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.