Tell us what’s happening:
My tests not passing, test 8, 9 and 10, 7th passed but rest not passing. I don’t understand what’s wrong. Please help me
Your code so far
let inventory = [];
function findProductIndex(productName) {
for(let i=0; i<inventory.length; i++) {
if(inventory[i].name === productName.toLowerCase()) {
return i;
}
}
return -1;
}
const addProduct = productObject => {
let productIndex = findProductIndex(productObject.name.toLowerCase());
if(productIndex === -1) {
inventory.push(productObject);
console.log(productObject.name + " " + "added to inventory");
}
else {
inventory[productIndex].quantity += productObject.quantity;
console.log(productObject.name + " " + "quantity updated");
}
}
Your browser information:
User Agent is: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36
Challenge Information:
Build an Inventory Management Program - Build an Inventory Management Program
https://www.freecodecamp.org/learn/full-stack-developer/lab-inventory-management-program/build-an-inventory-management-program
sanity
February 11, 2025, 8:14am
2
Have you looked at the console when trying to use function as in tests?
Ie.:
addProduct({name: "FLOUR", quantity: 5})
addProduct({name: "FLOUR", quantity: 5})
console.log(inventory)
Yes, console says - FLOUR added to inventory
I think I saw the problem now. When I again type - addProduct({name: "FLOUR", quantity: 5}) then it adds the FLOUR again but in a new object and also doesn’t update quantity.
Also name not converting to lower case but I written the code for it, please tell me how to fix it ?
ILM
February 12, 2025, 4:06pm
6
you use toLowerCase in the first line of the function, but later when you use productObject again it is not the lowercase version of the name
2 Likes
I updated the code, 2 test passed, 1 still fails. I think I should use a variable for product.name.toLowerCase() instead of typing it everywhere. But on which 1 place I am missing it, please guide me.
Updated code-
let inventory = [];
function findProductIndex(productName) {
for(let i=0; i<inventory.length; i++) {
if(inventory[i].name === productName.toLowerCase()) {
return i;
}
}
return -1;
}
const addProduct = productObject => {
let productIndex = findProductIndex(productObject.name.toLowerCase());
if(productIndex === -1) {
inventory.push(productObject);
console.log(productObject.name.toLowerCase() + " " + "added to inventory");
}
else {
inventory[productIndex].quantity += productObject.quantity;
console.log(productObject.name.toLowerCase() + " " + "quantity updated");
}
}
sanity
February 12, 2025, 7:39pm
8
Take another look at the output
addProduct({name: "FLOUR", quantity: 5})
console.log(inventory)
Test 9 mentions in inventory should be {name: "flour", quantity: 5} object after calling addProduct({name: "FLOUR", quantity: 5}).
1 Like
Yes, I saw that. But I don’t know where I am missing a .toLowerCase() method
sanity
February 16, 2025, 3:07pm
10
Well, how the object passed to the addProduct function gets to the inventory list?
Got it I will create a local variable inside function then use it instead.
I solved that but now in my removeProduct function, if statement not working
let inventory = [];
function findProductIndex(productName) {
for(let i=0; i<inventory.length; i++) {
if(inventory[i].name === productName.toLowerCase()) {
return i;
}
}
return -1;
}
const addProduct = productObject => {
productObject.name = productObject.name.toLowerCase();
let productIndex = findProductIndex(productObject.name);
if(productIndex === -1) {
inventory.push(productObject);
console.log(productObject.name + " " + "added to inventory");
}
else {
inventory[productIndex].quantity += productObject.quantity;
console.log(productObject.name + " " + "quantity updated");
}
}
function removeProduct(productName, productQuantity) {
productName = productName.toLowerCase();
let index = findProductIndex(productName);
let quantity = inventory[index].quantity - productQuantity;
if(index === -1) {
console.log(productName + " not found")
} else if(index !== -1) {
inventory[index].quantity -= productQuantity;
console.log("Remaining " + productName + " pieces: " + quantity);
}
}
sanity
February 16, 2025, 4:26pm
13
What do you mean not working ? What exactly is not working?
if statement of my remove product function not passing test
Did you try troubleshooting it by sending some variables to console.log()?
log index right before the if. Put log statements after the if conditions and find out what the fail conditions are. Dig for more information.
What is index ? What is the value supposed to be?
What would cause index to be -1?
when no object with name property matching product name found then -1 returned.
sanity
February 18, 2025, 6:44pm
17
mr-aakash:
function removeProduct(productName, productQuantity) {
productName = productName.toLowerCase();
let index = findProductIndex(productName);
let quantity = inventory[index].quantity - productQuantity;
if(index === -1) {
console.log(productName + " not found")
} else if(index !== -1) {
inventory[index].quantity -= productQuantity;
console.log("Remaining " + productName + " pieces: " + quantity);
}
}
Could you try to explain line-by-line, what’s happening in the function?
Can you find the line throwing this error?
TypeError: inventory[index] is undefined
removeProduct("FLOUR", 5)
Yes.
1st line - I make a function with two parameters, one for the name of product and another for quantity of product.
2nd line- I make sure that when function is executed, the product name should be in lower case only so I use a method.
3rd line - I get the index of the object of product inside using the 1st function I created.
4th line- I create a variable to find the present quantity - the quantity to be removed(argument one)
5th line- I check if the product specified is present or not, i not if not then index will be -1 because I made my 1st function like that.
6th line- I pass a string to console if above condition satisfied.
7th line- I check if product is present now. Like before based on 1st function.
8th line- I deduct the specified quantity as argument if product found in inventory.
9th line- I pass a statement to console based on above condition
yes I am getting an error but this -TypeError: Cannot read properties of undefined (reading ‘quantity’)