HarmonyOS Array.sort处理错误

let profiles =
  [[640, 480], [640, 640], [960, 536], [1088, 1080], [1088, 1088], [1280, 720], [1280, 960], [1440, 1080], [1920, 1080],
    [2336, 1080], [2816, 2112], [4160, 1920], [4160, 3120]];

const result = profiles.sort((a, b) => {
  const ratioA = a[0] / a[1];
  const ratioB = b[0] / b[1];

  if (ratioA !== ratioB) {
    return Math.abs(ratioA - 1) - Math.abs(ratioB - 1);
  }
  return a[1] - b[1];
})

HarmonyOS里执行以上代码,原数组没发生变化,node中执行排序结果正确。如果通过对比两个数大小,返回1和-1,则排序结果也可以正确。

HarmonyOS
2025-01-09 13:44:55
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
FengTianYa

示例参考如下:

// let profiles = [[640,480],[640,640],[960,536],[1088,1080],[1088,1088],[1280,720],[1280,960],[1440,1080],[1920,1080],[2336,1080],[2816,2112],[4160,1920],[4160,3120]];
// let profiles = [[1,3],[3,1],[2,2],[0,4]];
let profiles = [[1, 3], [2, 4], [3, 1], [4, 2]];
const result = profiles.sort((a, b) => {
  const ratioA = a[0] / a[1];
  const ratioB = b[0] / b[1];

  if (ratioA !== ratioB) {
    let num = Math.abs(ratioA - 1) - Math.abs(ratioB - 1)
    console.log('' + num)
    return Math.abs(ratioA - 1) - Math.abs(ratioB - 1); //-1.333
  }
  return a[1] - b[1];
})
console.log(JSON.stringify(result))

@Entry
@Component
struct Page240802150435072 {
  @State message: string = 'Hello World';

  build() {
    RelativeContainer() {
      Text(this.message)
        .id('Page240802150435072HelloWorld')
        .fontSize(50)
        .fontWeight(FontWeight.Bold)
        .alignRules({
          center: { anchor: '__container__', align: VerticalAlign.Center },
          middle: { anchor: '__container__', align: HorizontalAlign.Center }
        })
    }
    .height('100%')
    .width('100%')
  }
}
分享
微博
QQ
微信
回复
2025-01-09 17:14:03
相关问题
HarmonyOS Array.sort排序错误
289浏览 • 1回复 待解决
错误码62980096怎么处理
1381浏览 • 1回复 待解决
关于DevEco Studio的gradle错误处理
18041浏览 • 4回复 已解决
错误rowCount返回值-1如何处理
1697浏览 • 1回复 待解决
错误码15500000(首选项)如何处理
1714浏览 • 1回复 待解决
如何处理语音识别过程中的错误
494浏览 • 0回复 待解决
根据list中某项的id如何sort排序
866浏览 • 1回复 待解决