for循环逻辑无法检测数组中是否存在项目(javascript)

美国空军

我要检查内存中是否已经存在产品ID,所以我只更新它的数量,我的数据是一个数组,看起来像 [{ 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 })
    }
  }

它确实起作用,但仅当在同一产品上进行测试时,当我单击另一种产品然后返回到第一个产品时,它将该ID连接到数组,然后得到2个相似的ID。这很奇怪,所以我不确定应该使用哪种逻辑,下面的示例使用redux启发了我:

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
        }
        
    }
}
萨加尔·达雷卡(Sagar darekar)

我认为问题可能出在您的for循环内,它已针对多个项目执行。例如 -

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 })
    }
}

对于第一个乘积,它将set found等于true,并且对于第二次迭代,它将进入else并将set found等于false。我认为也许正因为如此,您获得了重复的产品。代替for循环检查元素是否存在,可以使用array的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/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/findIndex

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何检查项目是否存在于javascript数组中

如何检测数组中是否存在值

Javascript:循环数组中的项目

检查数组中是否存在项目

我的for循环无法正确检查数组中是否存在0或1

在数组中推送项目并查看项目是否已存在

用于循环逻辑的数组中的多个值-Javascript和JQuery

无法检测文件是否存在

如何检测特定数组中是否存在值?

在推送到数组之前检查数组中是否存在项目

JavaScript中数组的逻辑或

如何循环检查firebase中是否存在项目?

检查数组是否“包含” JavaScript中的项目

检查Javascript数组中是否存在标签

检查数组javascript中是否存在值

无法找到项目数组中是否存在一项,并在Perl中返回必要的消息

我无法获取代码来检查数组中是否已存在数字| 的JavaScript

检查数组打字稿中是否已存在新项目

检查项目是否存在于数组React中

如何检查Ansible数组中是否存在项目?

Python-如何查找多维数组中是否存在项目?

如何检查嵌套数组中是否存在项目

如何检查MonoDB数组中是否存在项目?

如何检查动态数组中是否存在项目?

检查数组中是否存在值php do while循环

如何检查JSON数组中是否存在值并继续循环

检查数组中是否存在某个项目,然后从该数组中删除该特定项目

无法使用 PowerShell 从字符串数组中循环项目

如何通过在Javascript中循环从数组中删除多个项目