如果使用TypeScript在数组中已经存在键值,如何通过onclick增加键值?

问题描述

这里我具有onclick函数,该函数从details数组中获取sql_modefunction func(months) { let days = months * 30.5; // Average days in a month let y = 0,m = 0,w = 0; while (days >= 365) {y++;days -= 365;} while (days >= 30.5) {m++;days -= 30.5;} while (days >= 7) {w++;days -= 7;} let out = (y ? (`${y} Year` + (y > 1 ? "s " : " ")) : "") + (m ? (`${m} Month` + (m > 1 ? "s " : " ")) : "") + (w ? (`${w} Week` + (w > 1 ? "s " : " ")) : ""); console.log(out); } func(10); func(3); func(1); func(0.1); func(0.25); func(13); func(14); func(14.25);Product_id。我正在使用本地存储阵列心愿单存储该值。

现在,我不得不更新本地存储阵列心愿单中的数量, 如果本地存储中已经存在productid,我需要添加数量。

Product_name

谢谢。

解决方法

  1. 从localStorage获取值并将其解析为对象

var myList = JSON.parse(localStorage.getItem('wishlist')) || [];

  1. 使用Product_id查找产品

addQuantity(Product_id,passedQuantity) {

  let productIndex=myList.findIndex(eachProduct=> eachProduct.Product_id==Product_id);
  if(productIndex==-1)
  {
  //Product does not exist in the array
  }
  else
  {
  myList[productIndex].Quantity=passedQuantity;
  }
}
  1. 再次对数组进行字符串化,然后将其保存回localStorage

localStorage.setItem('wishlist',JSON.stringify(myList));

,

仅在项目存在时才增加金额的功能。

在此示例中,通过点击购物车内的+按钮添加金额:

addAmount(Product_id){
    let myArray = JSON.parse(localStorage.getItem('wishlist'));
        for(let i = 0; i < myArray.length; i++){
           if(Product_id == myArray[i].Product_id){
               myArray[i].Quantity = parseInt(myArray[i].Quantity) + 1;
               localStorage.setItem('wishlist',JSON.stringify(myArray));
           }
    }
 }

如果您要传递数字:

 addAmount(Product_id,Quantity){
        let myArray= JSON.parse(localStorage.getItem('wishlist'));
            for(let i = 0; i < myArray.length; i++){
               if(Product_id == myArray[i].Product_id){
                   myArray[i].Quantity = Quantity;
                   localStorage.setItem('wishlist',JSON.stringify(myArray));
               }
        }
     }

P.S。对于此类数据,最好使用 Storage 而不是localStorage

在本地应用程序上下文中运行时,Storage将优先使用 SQLite,因为它是最稳定且使用最广泛的基于文件的文件之一 数据库,并避免了诸如本地存储之类的某些陷阱 和IndexedDB,例如OS决定以较低的价格清除此类数据 磁盘空间情况。

import { Storage } from '@ionic/storage';
...
constructor(public _storage: Storage){}
...
this._storage.get('wishlist').then((res) => {
     for(let i = 0; i < res.length; i++){
         if(Product_id == res[i].Product_id){
            res[i].Quantity = parseInt(res[i].Quantity) + 1;
            //res[i].Quantity = Quantity;
            this._storage.set('wishlist',res).then(()=>
                console.log(res)
            );
         }
     }
})
,

那不是localStorage的目的...试试webStoragehttps://www.w3schools.com/html/html5_webstorage.asp

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...