HarmonyOS 鸿蒙Next的Array的sort排序方法,在0.0.31版本不生效,0.0.26及之前版本都没问题

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

HarmonyOS 鸿蒙Next的Array的sort排序方法,在0.0.31版本不生效,0.0.26及之前版本都没问题

深色代码主题
复制
const Keyboard_ABC: Array<Array<KeyboardItemData>> = [
[
new KeyboardItemData(49, ‘1’),
new KeyboardItemData(50, ‘2’),
new KeyboardItemData(51, ‘3’),
new KeyboardItemData(52, ‘4’),
new KeyboardItemData(53, ‘5’),
new KeyboardItemData(54, ‘6’),
new KeyboardItemData(55, ‘7’),
new KeyboardItemData(56, ‘8’),
new KeyboardItemData(57, ‘9’),
new KeyboardItemData(48, ‘0’),
].sort((a, b) => {
return 0.5 - Math.random();
}),


更多关于HarmonyOS 鸿蒙Next的Array的sort排序方法,在0.0.31版本不生效,0.0.26及之前版本都没问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复
可参考demo中 toSortSuccess 的排序方式解决排序不生效问题,demo如下:
深色代码主题
复制
@Entry
@Component
struct ArraySortPage {
  @State message: string = 'Hello World';
  build() {
    Column() {
      Text(this.message)
        .id('ArraySortPageHelloWorld')
        .fontSize(50)
        .fontWeight(FontWeight.Bold)
        .alignRules({
          center: { anchor: '__container__', align: VerticalAlign.Center },
          middle: { anchor: '__container__', align: HorizontalAlign.Center }
        })
      ArkTsComm()
    }
    .justifyContent(FlexAlign.Center)
    .height('100%')
    .width('100%')
  }
}
@Component
export struct ArkTsComm {
  build() {
    Column() {
      Button() {
        Text('点击排序1')
      }
      .type(ButtonType.Capsule)
      .height(40)
      .width(200)
      .margin({top: 20})
      .onClick(() => {
        let sortClass: SortClass = new SortClass();
        sortClass.toSortFail();
        sortClass.toLog();
      })
      Button() {
        Text('点击排序2')
      }
      .type(ButtonType.Capsule)
      .height(40)
      .width(200)
      .margin({top: 20})
      .onClick(() => {
        let sortClass: SortClass = new SortClass();
        sortClass.toSortSuccess();
        sortClass.toLog();
      })
    }
  }
}
class SortClass {
  private items: string[] = ['9.15', '9.04', '9.10', '9.16', '9.11', '9.17', '9.23', '9.12', '9.18', '9.24', '9.13', '9.19', '9.25', '9.31', '9.20', '9.26', '9.32', '9.21', '9.27', '9.33', '9.22', '9.28', '9.34', '9.40', '8.70', '9.29', '9.35', '9.41', '8.71', '9.30', '9.36', '8.66', '8.72', '9.37', '9.43', '8.67', '9.49', '8.73', '8.79', '9.38', '9.44', '8.68', '8.74', '9.50', '8.80', '9.39', '9.45', '8.69', '8.75', '9.51', '8.81', '9.46', '9.52', '8.76', '8.82', '8.88', '9.47', '9.53', '8.77', '8.83', '8.89', '9.48', '8.78', '9.54', '8.84', '8.90', '9.55', '8.85', '8.91', '8.97', '9.56', '8.86', '8.92', '8.98', '8.87', '8.93', '8.99', '9.05', '8.94', '9.00', '9.06', '8.95', '9.01', '9.07', '8.96', '9.02', '9.08', '9.14', '9.03', '9.09']
  toLog() {
    console.info('SortClass: ' + JSON.stringify(this.items));
  }
  // 目前该方式排序存在问题,在18版本能验证pass
  toSortFail() {
    this.items.sort((m1: string, m2: string) => {
      return Number.parseFloat(m1) - Number.parseFloat(m2);
    })
  }
  // 目前使用该方式排序可以达到预期
  toSortSuccess() {
    let comp: number = 0; this.items.sort((m1: string, m2: string) => {
      comp = Number.parseFloat(m1) - Number.parseFloat(m2);
      return comp > 0 ? 1 : (comp < 0 ? -1 : 0);
    })
  }
}

更多关于HarmonyOS 鸿蒙Next的Array的sort排序方法,在0.0.31版本不生效,0.0.26及之前版本都没问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next的0.0.31版本中,若Arraysort排序方法不生效,而0.0.26及之前版本均表现正常,可能的原因包括但不限于API变动、底层实现调整或已知的bug。

针对此问题,可首先检查以下几点:

  1. 确认排序方法调用:确保调用sort方法时传入的比较函数(如适用)逻辑正确,且符合当前版本的API要求。

  2. 版本差异对比:查阅HarmonyOS鸿蒙Next从0.0.26到0.0.31版本的更新日志,寻找关于Array或排序功能的具体变更说明。

  3. 测试环境一致性:确保测试环境(如设备型号、系统配置)在不同版本间一致,以排除环境因素干扰。

  4. 查阅官方文档:访问HarmonyOS官方文档,查看Array类的sort方法是否有更新说明或替代方案。

若以上步骤均无法解决问题,可能需考虑是否为系统级别的bug。此时,建议通过HarmonyOS官方渠道反馈问题,或直接联系技术支持。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部