嵌套for循环显示重复输出
Nested for loop display duplicated output
我一直在获取输出,但它是 amount.Like 的两倍,例如,如果所需的输出是 SUGAR.The,程序将显示
SUGAR
SUGAR
我有办法解决这个问题吗?我实际上是在使用嵌套的 for 循环来遍历 objects.Below 的数组是嵌套的 for 循环的代码
for(var i=0; i<ingredientList.length; i++){
for(var j=0; j<this.objUser.length; j++){
len = this.objUser.length;
userAllergyDetails.push(this.objUser[j].userAllergies);
for(var k=0; k<len; k++){ //matching starts
if(ingredientList[i] == this.objUser[j].userAllergies.toUpperCase()){
console.log('match');
unSafeResult.push(ingredientList[i]);
console.log(unSafeResult);
}
}
}
}
console.log(userAllergyDetails);
console.log(userAllergyDetails.length);
console.log(this.objUser);
}
以上代码的输出是
ingredient list (26) ["INGREDIENTS↵WHEAT FLOUR", "SUGAR", "CHOCOLATE LIQUOR", "HYDROGENATED VEGETABLE↵OIL", "SAL FAT", "SHEA BUTTER", "RAPESEED OIL", "PALM OIL", "SUNFLOWER OIL", "WHOLE MILK↵POWDER", "SHORTENING", "COCOA BUTTER", "SALT", "BUTTER", "YEAST", "EMULSIFIER", "POLYGLYCEROLPOLYRICINOLEANTE", "SOY LECITHIN", "ARTIFICIAL FLAVOR", "TRISODIUMPHOSPHATE", "LEAVENING", "SODIUM BICARBONATE", "CONTAINS: MILK", "WHEAT", "SOYBEANS and SHEANUT", "Manufactured in a facility that uses↵EGGS and PEANUTS"]
match
main.js:41963 ["SUGAR"]0: "SUGAR"1: "SUGAR"length: 2__proto__: Array(0)
main.js:41961 match
main.js:41963 (2) ["SUGAR", "SUGAR"]0: "SUGAR"1: "SUGAR"length: 2__proto__: Array(0)
main.js:41968 data retrieve from object (52) ["Oil", "Sugar", "Oil", "Sugar", "Oil", "Sugar", "Oil", "Sugar", "Oil", "Sugar", "Oil", "Sugar", "Oil", "Sugar", "Oil", "Sugar", "Oil", "Sugar", "Oil", "Sugar", "Oil", "Sugar", "Oil", "Sugar", "Oil", "Sugar", "Oil", "Sugar", "Oil", "Sugar", "Oil", "Sugar", "Oil", "Sugar", "Oil", "Sugar", "Oil", "Sugar", "Oil", "Sugar", "Oil", "Sugar", "Oil", "Sugar", "Oil", "Sugar", "Oil", "Sugar", "Oil", "Sugar", "Oil", "Sugar"]
这是我要遍历的对象
Object
0:
resultUnsafe
:
Array(0)
resultWarning
:
Array(0)
userAllergies
:
"Oil"
userName
:
"Dad"
__proto__
:
Object
1
:
Object
resultUnsafe
:
Array(0)
resultWarning
:
Array(0)
userAllergies
:
"Sugar"
userName
:
"Mum"
如对象所示,只有 2 个 userAllergies,这意味着长度为 2,但为什么在控制台中显示 52?我如何确保只有 SUGAR 被推送到数组?
为了使您的代码更好,您应该考虑使用更具描述性的索引变量:
for (var ingredientIndex = 0; ingredientIndex < ingredientList.length; ingredientIndex ++)
打字时间更长,但更容易调试像您遇到的细微问题
这是有效的版本,更易于阅读:
// Loop through the ingredients
for (var ingredientIndex = 0; ingredientIndex < ingredientList.length; ingredientIndex++) {
// For each ingredient, check each user to see if they are allergic
for (var userIndex = 0; userIndex < objUser.length; userIndex++) {
// Loop through each user's allergies
for (var allergyIndex = 0; allergyIndex < objUser[userIndex].userAllergies.length; allergyIndex++) {
if (ingredientList[ingredientIndex] == objUser[userIndex].userAllergies[allergyIndex].toUpperCase()) {
unSafeResult.push(ingredientList[ingredientIndex]);
}
}
}
}
我一直在获取输出,但它是 amount.Like 的两倍,例如,如果所需的输出是 SUGAR.The,程序将显示
SUGAR
SUGAR
我有办法解决这个问题吗?我实际上是在使用嵌套的 for 循环来遍历 objects.Below 的数组是嵌套的 for 循环的代码
for(var i=0; i<ingredientList.length; i++){
for(var j=0; j<this.objUser.length; j++){
len = this.objUser.length;
userAllergyDetails.push(this.objUser[j].userAllergies);
for(var k=0; k<len; k++){ //matching starts
if(ingredientList[i] == this.objUser[j].userAllergies.toUpperCase()){
console.log('match');
unSafeResult.push(ingredientList[i]);
console.log(unSafeResult);
}
}
}
}
console.log(userAllergyDetails);
console.log(userAllergyDetails.length);
console.log(this.objUser);
}
以上代码的输出是
ingredient list (26) ["INGREDIENTS↵WHEAT FLOUR", "SUGAR", "CHOCOLATE LIQUOR", "HYDROGENATED VEGETABLE↵OIL", "SAL FAT", "SHEA BUTTER", "RAPESEED OIL", "PALM OIL", "SUNFLOWER OIL", "WHOLE MILK↵POWDER", "SHORTENING", "COCOA BUTTER", "SALT", "BUTTER", "YEAST", "EMULSIFIER", "POLYGLYCEROLPOLYRICINOLEANTE", "SOY LECITHIN", "ARTIFICIAL FLAVOR", "TRISODIUMPHOSPHATE", "LEAVENING", "SODIUM BICARBONATE", "CONTAINS: MILK", "WHEAT", "SOYBEANS and SHEANUT", "Manufactured in a facility that uses↵EGGS and PEANUTS"]
match
main.js:41963 ["SUGAR"]0: "SUGAR"1: "SUGAR"length: 2__proto__: Array(0)
main.js:41961 match
main.js:41963 (2) ["SUGAR", "SUGAR"]0: "SUGAR"1: "SUGAR"length: 2__proto__: Array(0)
main.js:41968 data retrieve from object (52) ["Oil", "Sugar", "Oil", "Sugar", "Oil", "Sugar", "Oil", "Sugar", "Oil", "Sugar", "Oil", "Sugar", "Oil", "Sugar", "Oil", "Sugar", "Oil", "Sugar", "Oil", "Sugar", "Oil", "Sugar", "Oil", "Sugar", "Oil", "Sugar", "Oil", "Sugar", "Oil", "Sugar", "Oil", "Sugar", "Oil", "Sugar", "Oil", "Sugar", "Oil", "Sugar", "Oil", "Sugar", "Oil", "Sugar", "Oil", "Sugar", "Oil", "Sugar", "Oil", "Sugar", "Oil", "Sugar", "Oil", "Sugar"]
这是我要遍历的对象
Object
0:
resultUnsafe
:
Array(0)
resultWarning
:
Array(0)
userAllergies
:
"Oil"
userName
:
"Dad"
__proto__
:
Object
1
:
Object
resultUnsafe
:
Array(0)
resultWarning
:
Array(0)
userAllergies
:
"Sugar"
userName
:
"Mum"
如对象所示,只有 2 个 userAllergies,这意味着长度为 2,但为什么在控制台中显示 52?我如何确保只有 SUGAR 被推送到数组?
为了使您的代码更好,您应该考虑使用更具描述性的索引变量:
for (var ingredientIndex = 0; ingredientIndex < ingredientList.length; ingredientIndex ++)
打字时间更长,但更容易调试像您遇到的细微问题
这是有效的版本,更易于阅读:
// Loop through the ingredients
for (var ingredientIndex = 0; ingredientIndex < ingredientList.length; ingredientIndex++) {
// For each ingredient, check each user to see if they are allergic
for (var userIndex = 0; userIndex < objUser.length; userIndex++) {
// Loop through each user's allergies
for (var allergyIndex = 0; allergyIndex < objUser[userIndex].userAllergies.length; allergyIndex++) {
if (ingredientList[ingredientIndex] == objUser[userIndex].userAllergies[allergyIndex].toUpperCase()) {
unSafeResult.push(ingredientList[ingredientIndex]);
}
}
}
}