У меня есть объект в JavaScript, который выглядит примерно так
{
product_id: "2",
product_name: "Drinks"
}
Имя объекта - product.
Существует массив, который содержит записи вышеупомянутого объекта.Таким образом, каждый элемент массива является записью вышеуказанного объекта.
При нажатии кнопки я проверяю, существует ли в массиве запись объекта с определенным product_id (который ищется) или нет.Если объект с определенным идентификатором product_id не существует в массиве, я должен добавить этот новый объект в массив.Принимая во внимание, что если запись объекта с определенным идентификатором product_id существует, то сначала я должен добавить новое свойство с именем «qty» к объекту, а затем этот объект должен быть добавлен в качестве новой записи в массив.
Ниже приведенокод при нажатии кнопки.
Я console.log () массив, чтобы увидеть результат.
Когда кнопка нажимается в первый раз, я получаю правильную запись в массиве, где он показывает объект внутри массива.
Когда кнопка нажимается второй раз, код переходит кусловие else и новое свойство (по имени qty) добавляются к объекту, а затем объект добавляется в массив.Итак, теперь в массиве есть две записи объекта (первая добавляется через условие if, а вторая добавляется через условие else).
Странно, проблема в том, что при нажатии второй кнопки времени и выполнении условия else код модифицирует предыдущую запись существующего объекта (которая уже есть в массиве) и добавляет свойство qty в этот объектзапись также.
В идеале он должен обрабатывать эти две записи как отдельные записи, и если я изменяю вторую запись объекта, то первая запись (которая уже существует в массиве) должна оставаться как есть (что означает отсутствие свойства qty).) тогда как он также изменяет предыдущую запись и добавляет новую.
OnButtonClick() {
if (array.length === 0) {
array.splice(0, 0, product);
}
else {
product.qty = 1;
array.splice(0, 0, this.product);
}
}
Ниже приведен полный код:
// First Page: categories.ts sets the existing product object using a service
// then navigates to the second page product.ts
ButtonClick() {
this.Service.setProduct(product);
this.route.navigate(['products']);
}
// Service page: service.ts
export class ManageService {
products: any;
ProductArray: any = [];
constructor() { }
public setProduct(data) {
this.products = data;
}
public getProduct() {
return this.products;
}
}
//Second page: products.ts
// First it gathers the product object details that were passed from previous
// categories.ts using getProduct() method in the service.ts
export class ProductsPage implements OnInit {
product: any = [];
ngOnInit() {
this.product = this.Service.getExtras();
}
ButtonClick(searchid: any) {
// searchid is passed on button click
let findsearchidarr = FindItem(searchid);
if (findsearchidarr[0] === true) {
this.Service.ProductArray[findsearchidarr[1]].quantity =
++this.Service.ProductArray[findsearchidarr[1]].quantity;
this.router.navigate(['categories']);
}
else if (findsearchidarr[0] === false) {
this.product.quantity = 1;
this.Service.ProductArray.splice(0, 0, this.product);
this.router.navigate(['categories']);
}
}
FindItem (searchid: any) {
let i = 0;
let foundarray: any = [];
for (let items of this.Service.ProductArray) {
if (items.search_id.toLowerCase().includes(searchid)) {
foundarray[0] = true;
foundarray[1] = i;
foundarray[2] = items.product_id;
return foundarray;
}
i++;
}
foundarray[0] = false;
foundarray[1] = -1;
foundarray[2] = 0;
return foundarray;
}
}