第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

for循環(huán)邏輯無法檢測數(shù)組中是否存在項目(javascript)

for循環(huán)邏輯無法檢測數(shù)組中是否存在項目(javascript)

紅糖糍粑 2022-10-13 19:27:35
我正在檢查內(nèi)存中是否已經(jīng)存在產(chǎn)品 ID,所以我只更新它的數(shù)量,我的數(shù)據(jù)是一個看起來像的數(shù)組[{ id: data.id, price: data.price, qty: 1 }]我的代碼是這個功能storeProduct = async (data) => {    this.setState({ found: null })    try {      const value = await AsyncStorage.getItem('cart')      if (value !== null) {        var products = JSON.parse(value)        for (let x in products) {          if (products[x].id === data.id) {            this.setState({ found: true })          } else {            this.setState({ found: false })          }        }      } else {        await AsyncStorage.setItem(          'cart',          JSON.stringify([{ id: data.id, price: data.price, qty: 1 }])        )      }      if (this.state.found === false) {        var obj = { id: data.id, price: data.price, qty: 1 }        await AsyncStorage.setItem('cart', JSON.stringify([...JSON.parse(value), obj]))      }    } catch (error) {      this.setState({ error: error })    }  }它確實有效,但僅在對同一產(chǎn)品進行測試時,當我單擊另一個產(chǎn)品然后返回到第一個產(chǎn)品時,它將該 id 連接到數(shù)組中,我得到 2 個相似的 id。這很奇怪,所以我不確定應(yīng)該使用什么邏輯,我受到以下使用 redux 示例的啟發(fā):if(action.type === ADD_TO_CART){      let addedItem = state.items.find(item=> item.id === action.id)      //check if the action id exists in the addedItems     let existed_item= state.addedItems.find(item=> action.id === item.id)     if(existed_item)     {        addedItem.quantity += 1          return{            ...state,             total: state.total + addedItem.price               }    }     else{        addedItem.quantity = 1;        //calculating the total        let newTotal = state.total + addedItem.price                 return{            ...state,            addedItems: [...state.addedItems, addedItem],            total : newTotal        }            }}
查看完整描述

2 回答

?
慕桂英3389331

TA貢獻2036條經(jīng)驗 獲得超8個贊

我認為問題可能出在您的 for 循環(huán)中,它會針對多個項目執(zhí)行。例如 -


let products = [{ id: "id", price: "price", qty: 1 },{ id: "id2", price: "price2", qty: 12 }]


for (let x in products) {

  if (products[x].id === data.id) {

         this.setState({ found: true })

    } else {

         this.setState({ found: false })

    }

}

對于第一個產(chǎn)品,它將設(shè)置 found 等于 true,對于第二次迭代,它將進入 else 并將 found 設(shè)置為 false。我想也許正因為如此,你得到了一個重復(fù)的產(chǎn)品。代替 for 循環(huán)來檢查元素是否存在,您可以使用數(shù)組的 findIndex 方法 -


let index = products.findIndex((element)=> element.id === data.id)

if(index !== -1)

{

 this.setState({ found: true })

}else{

 this.setState({ found: false })

}

findindex 的參考 - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/findIndex


查看完整回答
反對 回復(fù) 2022-10-13
?
慕沐林林

TA貢獻2016條經(jīng)驗 獲得超9個贊

我不熟悉反應(yīng),但通常像這樣的一行:for (let x in products),將帶回 x 的產(chǎn)品,而不是索引。您將 x 視為索引。這是問題的一部分嗎?



查看完整回答
反對 回復(fù) 2022-10-13
  • 2 回答
  • 0 關(guān)注
  • 133 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號