簡體   English   中英

檢查 Object 數組中是否存在 object ID

[英]Check if object ID exists in Object array

我從 sessionStorage 解析了這個 object 數組。 我想在數組中添加一個項目,但如果它已經存在,則只更新該項目的數量,而不是再次添加它。 這是我到目前為止所嘗試的:

    var tobeSaved = store.getters.printCart; //This is the data that I want to add

    if(tobeSaved.length){   
      if(sessionStorage.length){
        var existingCart = JSON.parse(sessionStorage.cart); //This is the sessionStorage items
        var size = Object.keys(existingCart).length;    

        const found = tobeSaved.some(el => el.itemID === existingCart.itemID);
        if(found){
          
        } else{
          existingCart.push(tobeSaved[0]);  

          let myObj_serialized = JSON.stringify(existingCart);  
          sessionStorage.setItem('cart', myObj_serialized);
        }
      } else{   
        let myObj_serialized = JSON.stringify(tobeSaved);   
        sessionStorage.setItem('cart', myObj_serialized);   
      } 

這是我的 SessionStorage 數組:

    0:
      itemID: "11111"
      itemName: "sessionItem1"
      itemPrice: 550
      itemQuantity: 1
    1:
      itemID: "22222"
      itemName: "sessionItem2"
      itemPrice: 550
      itemQuantity: 1

這是我的 tobeSaved object:

itemID: "11111",
itemName: "sessionItem1"
itemPrice: 550
itemQuantity: 6

我想要做的是,如果 tobeSaved 已經存在於現有購物車中,它應該只更新數量,但如果沒有,則在數組中添加另一個 object。

這應該適合你。 您正在遍歷該項目,理想情況下您應該遍歷現有數組並檢查 ID 是否存在?

const found = tobeSaved.some(el => el.itemID === existingCart.itemID);

應該

const found = existingArray.some(el => el.itemID === toBeSaved.itemID);

或者就像我使用 find 所做的那樣,這對我來說似乎是個不錯的選擇。

let obj = exisitngArr.find(o => o.ID === newObj.ID);


var arr=[{
          itemID: "11111",
          itemName: "sessionItem1",
          itemPrice: 550,
          itemQuantity: 1
    },
         {
          itemID: "22222",
          itemName: "sessionItem2",
          itemPrice: 550,
          itemQuantity: 1
    }];
    
    window.sessionStorage.setItem('cart',JSON.stringify(arr));
    
    var exisitngArr = JSON.parse(window.sessionStorage.getItem('cart'));
    
    var newObj = {itemID: "11111",
    itemName: "sessionItem1",
    itemPrice: 550,
    itemQuantity: 6}
    
    function updateData(){
    let obj = exisitngArr.find(o => o.ID === newObj.ID);    
    
        if(obj!== undefined && obj !== null){
            obj.itemQuantity = newObj.itemQuantity;    
        } else {
            exisitngArr.push(newObj);
        }
    window.sessionStorage.setItem('cart',JSON.stringify(exisitngArr));
    }
    
    updateData();
    
    console.log(JSON.parse(window.sessionStorage.getItem('cart')));

或者這個怎么樣?

const SessionStorage = [
  {
    itemID: "11111",
    itemName: "sessionItem1",
    itemPrice: 550,
    itemQuantity: 1,
  },
  {
    itemID: "22222",
    itemName: "sessionItem2",
    itemPrice: 550,
    itemQuantity: 1,
  }
];

const toBeSaved = {
  itemID: "11111",
  itemName: "sessionItem1",
  itemPrice: 550,
  itemQuantity: 6,
}

const addOrUpdate = (SessionStorageArray, toBeSavedObject) => {

  const index = SessionStorageArray.findIndex(session => session.itemID === toBeSavedObject.itemID);
  
  if (index === -1) {
    SessionStorageArray.push(toBeSavedObject);
  } else {
    SessionStorageArray[index].itemQuantity = toBeSavedObject.itemQuantity;
  }
  
  return SessionStorageArray;
};

console.table(addOrUpdate(SessionStorage, toBeSaved));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM