Все, что вам действительно нужно сделать, это изменить productsRegistered
с массива на объект. Если у вас есть массив, элементы не отображаются при его регистрации, потому что они не находятся в свойствах индекса массива.
Поскольку registerProduct
ничего не возвращает, вы не должны назначать возврат значение переменной - вместо этого изучите объект productsRegistered
.
const productsRegistered = {};
const Product = function( name, category, description, price, code) {
this.name = name
this.category = category
this.description = description
this.price = 'R$: ' + price + '.00'
this.code = codeGenerator(productsRegistered)
}
function codeGenerator(productList) {
let productCode = ''
for (product in productList) {
let productCategory = productList[product].category
if (productCategory.length <= 3){
productCode = productCategory
} else {
productCode = sliceWords(productCategory)
}
if (productList.length === 0) {
productCode += '-01'
} else {
productCode += '-0' + productList.length + 1
}
} return productCode
}
function registerProduct( name, category, description, price ) {
productsRegistered[category.toUpperCase()] = new Product(name,category,description,price)
}
function sliceWords(word) {
code = ''
for(let n = 0; n <= 5; n += 2) {
code += word[n].toUpperCase()
} return code
}
registerProduct('HP - ALL IN ONE','Computers and Laptops','HP Computer Entel Core i10','1500')
registerProduct('LG - Vacuum Cleaner 3000','appliances','Super smart vacuum cleaner sucking: water, dust and souls','300')
console.log(productsRegistered);
Или, если вы хотите, чтобы продукт отображался в productsRegistered
объекте и в возвращаемом значении вызова registerProduct
, сохраните экземпляр Product в переменной, так что вы можете назначить его объекту и вернуть его:
const productsRegistered = {};
const Product = function(name, category, description, price, code) {
this.name = name
this.category = category
this.description = description
this.price = 'R$: ' + price + '.00'
this.code = codeGenerator(productsRegistered)
}
function codeGenerator(productList) {
let productCode = ''
for (product in productList) {
let productCategory = productList[product].category
if (productCategory.length <= 3) {
productCode = productCategory
} else {
productCode = sliceWords(productCategory)
}
if (productList.length === 0) {
productCode += '-01'
} else {
productCode += '-0' + productList.length + 1
}
}
return productCode
}
function registerProduct(name, category, description, price) {
const product = new Product(name, category, description, price);
productsRegistered[category.toUpperCase()] = product;
return product;
}
function sliceWords(word) {
code = ''
for (let n = 0; n <= 5; n += 2) {
code += word[n].toUpperCase()
}
return code
}
const computer = registerProduct('HP - ALL IN ONE', 'Computers and Laptops', 'HP Computer Entel Core i10', '1500')
const vacuum = registerProduct('LG - Vacuum Cleaner 3000', 'appliances', 'Super smart vacuum cleaner sucking: water, dust and souls', '300')
console.log(productsRegistered);
console.log(computer);
Если вы хотите, чтобы каждое значение объекта productsRegistered
представляло собой массив, а не объект, то создайте массив в свойстве, если его там еще не существует затем пу sh к нему:
const productsRegistered = {};
const Product = function(name, category, description, price, code) {
this.name = name
this.category = category
this.description = description
this.price = 'R$: ' + price + '.00'
this.code = codeGenerator(this.category)
}
function codeGenerator(productCategory) {
let productCode = ''
if (productCategory.length <= 3) {
productCode = productCategory
} else {
productCode = sliceWords(productCategory)
}
if (typeof productList === 'undefined') {
productCode += '-01'
} else {
productCode += '-0' + productList.length + 1
}
return productCode
}
function registerProduct(name, category, description, price) {
const product = new Product(name, category, description, price);
const key = category.toUpperCase();
if (!productsRegistered[key]) {
productsRegistered[key] = [];
}
productsRegistered[key].push(product);
return product;
}
function sliceWords(word) {
code = ''
for (let n = 0; n <= 5; n += 2) {
code += word[n].toUpperCase()
}
return code
}
const computer = registerProduct('HP - ALL IN ONE', 'Computers and Laptops', 'HP Computer Entel Core i10', '1500')
const vacuum = registerProduct('LG - Vacuum Cleaner 3000', 'appliances', 'Super smart vacuum cleaner sucking: water, dust and souls', '300')
console.log(productsRegistered);
console.log(computer);