【鸿蒙 NEXT Harmony OS】使用LazyForEach删除item,index下标异常,列表无法正常删除

在LazyForEach中删除item选项时,如果传入的index为itemGenerator的index可能会有数据异常现象

LazyForEach(
        dataSource,
        (item: Data, index: number) => {
          ListItem({
            item: item,
            deleteEvent: () => {
              console.debug("TestDataTag index: " + dataSource.dataArray.indexOf(item) + " in:" + index)
              // 执行删除操作
              this.data.deleteData(this.data.dataArray.indexOf(item));
            }
          })
        },
        (item: Data, index: number) => {
          return JSON.stringify(item) + index
        }
      )

以下为log信息,只有第一次删除时index为正确下标
log信息
当我们多次点击子组件时,会发现删除的并不一定是我们点击的那个子组件。

原因

原因是当我们删除了某一个子组件后,位于该子组件对应的数据项之后的各数据项,其index均应减1,但实际上后续的数据项对应的子组件仍然使用的是最初分配的index,其itemGenerator中的index并没有发生变化,所以删除结果和预期不符。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在Python中,你可以使用三种方法来删除列表中的指定元素:remove、pop和del。如果你知道要删除的元素的值,你可以使用remove方法。这个方法会删除列表中首个符合条件的元素。例如,如果你有一个列表str=\[1,2,3,4,5,2,6\],你可以使用str.remove(2)来删除值为2的元素。删除后的列表将变为\[1, 3, 4, 5, 2, 6\]。\[2\] 如果你知道要删除的元素的索引位置,你可以使用del关键字或pop()方法。del关键字可以根据索引值删除元素,例如del str\[2\]将删除索引为2的元素。pop()方法也可以根据索引值删除元素,并且会返回被删除的元素。例如,str.pop(2)将删除索引为2的元素并返回它。\[3\] 总结起来,如果你知道要删除的元素的值,可以使用remove方法;如果你知道要删除的元素的索引位置,可以使用del关键字或pop()方法。 #### 引用[.reference_title] - *1* *3* [Python list列表删除元素(4种方法)](https://blog.csdn.net/shixin_0125/article/details/105820615)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [python基础](https://blog.csdn.net/weixin_42259952/article/details/103392164)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值