HarmonyOS 鸿蒙Next中使用reduce函数,返回的结果为什么会把数组的长度加进去?

发布于 1周前 作者 yibo5220 来自 鸿蒙OS

HarmonyOS 鸿蒙Next中使用reduce函数,返回的结果为什么会把数组的长度加进去?

使用函数如下,改变任务完成情况后,数据会把数组长度加进去,代码按照示例样式,原因在哪一直没找到

computedStatusCount(status:string){
  const count=this.tasks.reduce((sum:number,item:TaskModel)=>{
    if (item.taskStatus===status){
      sum+=1
    }
    return sum
  },0)
  return count
}
Row(){
  PlanComponent({
    imageResource:$r('app.media.icontp'),
    taskCompletion:'未完成',
    taskNumber:`${this.computedStatusCount('undone')}`,
  })
}

更多关于HarmonyOS 鸿蒙Next中使用reduce函数,返回的结果为什么会把数组的长度加进去?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

4 回复
楼主,我这边写了个demo,改变状态后,用reduce函数计算是正常的,您参考排查下是不是tasks这个数据model有问题

```javascript
tasks: TaskModel[] = [
    {
      'taskStatus': 'undone',
    },
    {
      'taskStatus': 'undone',
    },
    {
      'taskStatus': 'undone',
    },
    {
      'taskStatus': 'undone',
    },
    {
      'taskStatus': 'done',
    },
    {
      'taskStatus': 'done',
    },
    {
      'taskStatus': 'done',
    }];

computedStatusCount(status:string) {
    const count: number = this.tasks.reduce((sum:number, item:TaskModel)=>{
      if (item.taskStatus ===status){
        sum+=1
      }
      console.log(`accumulator: ${sum}, currentValue: ${item.taskStatus}`);
      return sum
    },0)
    return count
  }

Button('改变数组状态').onClick(() => {
  this.tasks[5].taskStatus = 'undone';
})

Button('计算结果')
.margin({ top: 10 })
.onClick(() => {
  let statusCount = this.computedStatusCount('undone');
  console.log('statusCount is ' + statusCount);
})

更多关于HarmonyOS 鸿蒙Next中使用reduce函数,返回的结果为什么会把数组的长度加进去?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


找到原因了,是返回主页时又重新初始化了测试数据

在HarmonyOS鸿蒙Next中使用reduce函数时,返回结果包含数组长度的情况,可能是由于reduce的初始值设置不当或回调函数的逻辑问题导致的。reduce函数的工作原理是通过遍历数组,将数组中的每个元素与累加器(初始值)进行回调函数的操作,最终返回一个单一的值。如果初始值设置为数组的长度,或者在回调函数中错误地将数组长度累加进去,那么最终结果就会包含数组的长度。

例如,假设你有一个数组[1, 2, 3],如果初始值设置为0,而回调函数中错误地将数组长度加进去,那么最终结果可能是6 + 3 = 9,其中6是数组元素的和,3是数组的长度。

要避免这种情况,需要确保回调函数的逻辑正确,且初始值设置合理。如果不需要累加数组长度,确保回调函数中不涉及数组长度的操作。

在HarmonyOS(鸿蒙Next)中使用reduce函数时,返回结果包含数组长度的情况通常是因为回调函数中的初始值设置不当。reduce函数会对数组中的每个元素执行回调函数,并将结果累积。如果未正确设置初始值,可能会导致意外的累积结果,例如将数组长度包含在内。确保初始值正确设置,如arr.reduce((acc, cur) => acc + cur, 0),可以避免此类问题。

回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!