HarmonyOS 鸿蒙Next 在界面内向数组内添加数据时,莫名会自动在双数位置插入一个undefined

发布于 1周前 作者 sinazl 最后一次编辑是 5天前 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 在界面内向数组内添加数据时,莫名会自动在双数位置插入一个undefined

在页面内声明一个数组,在界面内点击按钮向里面push一个对象,添加数据的时候打印日志只加进去一条数据,但是遍历时发现会在加入数据后自动加入了一个undefined对象。可以参见下方日志。。

//添加数组

test array add data={"id":0},len=1

test array add data={"id":2},len=3

test array add data={"id":4},len=5

test array add data={"id":6},len=7

//遍历数组

test array  index=0data====>undefined

test array  index=1data====>{"id":0}

test array  index=2data====>undefined

test array  index=3data====>{"id":2}

test array  index=4data====>undefined

test array  index=5data====>{"id":4}

test array  index=6data====>undefined

test array  index=7data====>{"id":6}

更多关于HarmonyOS 鸿蒙Next 在界面内向数组内添加数据时,莫名会自动在双数位置插入一个undefined的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复
可以改成这种写法,示例如下
import { TableCertConfig } from './TableCertConfig';
[@Entry](/user/Entry)
[@Component](/user/Component)
struct Index {[@State](/user/State) message: string = '添加数据';
  [@State](/user/State) certConfigItems: TableCertConfig[] = [];
  [@State](/user/State) index: number = 0;
  build() {
    RelativeContainer() {
      Text(this.message)
        .id('TestPageHelloWorld')
        .fontSize(50)
        .fontWeight(FontWeight.Bold)
        .alignRules({
          center: { anchor: '__container__', align: VerticalAlign.Center },
          middle: { anchor: '__container__', align: HorizontalAlign.Center }
        })
        .onClick(() => {
          let data = new TableCertConfig();
          data.id = this.index++;
          console.debug(`test array add data=${JSON.stringify(data)},len=${this.certConfigItems.length}`)
          this.certConfigItems.push(data)
        })
      Text('遍历数据')
        .id('TestPageHelloWorld1')
        .fontSize(50)
        .fontWeight(FontWeight.Bold)
        .alignRules({
          top: { anchor: 'TestPageHelloWorld', align: VerticalAlign.Bottom },
          middle: { anchor: '__container__', align: HorizontalAlign.Center }
        })
        .onClick(() => {
          for (let i = 0; i < this.certConfigItems.length; i++) {
            let data = this.certConfigItems[i]
            console.debug(`test array index=${i}data====>${JSON.stringify(data)}`)
          }
        })
    }
    .height('100%')
    .width('100%')
  }
}

数组是一个class,里面有一个length元素,每次push的时候,会维护这个length。目前通过自增这个length,但是又没有元素添加,就会有空元素,出现undifined。

如果改成:

.onClick(() => {
let data = new TableCertConfig();
data.id = this.certConfigItems.length;//this.certConfigItems.length++
console.debug(`test array add data=${JSON.stringify(data)},len=${this.certConfigItems.length}`)
this.certConfigItems.push(data)
})

更多关于HarmonyOS 鸿蒙Next 在界面内向数组内添加数据时,莫名会自动在双数位置插入一个undefined的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next系统中,界面内向数组内添加数据时,若遇到在双数位置自动插入undefined的问题,这通常与数据绑定或数组操作不当有关。检查以下可能的原因:

  1. 数据绑定错误:确保你在界面模板中正确绑定了数组数据,且绑定的逻辑没有错误地触发多次数据添加。

  2. 数组操作不当:在添加数据到数组时,检查是否有代码逻辑错误,如重复添加或错误地修改了数组内容。确认添加操作是在正确的生命周期钩子或事件处理函数中进行。

  3. 异步数据处理:如果数据是异步获取的,确保数据处理逻辑正确,且在数据完全加载后再进行数组操作。

  4. 框架内部问题:虽然较少见,但有可能是鸿蒙框架的某个版本中的bug。检查是否有相关的框架更新或修复。

  5. 内存或性能问题:在高负载情况下,内存或性能问题可能导致数据处理异常。检查应用的内存使用情况和性能表现。

针对以上可能的原因,逐一排查并修正。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部