HarmonyOS 鸿蒙Next 数组排序中两个number值比较,为何162比1402大?

HarmonyOS 鸿蒙Next 数组排序中两个number值比较,为何162比1402大?

数组排序,两个number值进行比较,162却比1402大,这是什么原因??

15 回复

改成这样之后 排序正常了

var val = pitchDataA.sort(function (x: PitchData, y: PitchData) {
  return x.distanceValue - y.distanceValue;
});

更多关于HarmonyOS 鸿蒙Next 数组排序中两个number值比较,为何162比1402大?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


console.log("163" > "1402") // true
console.log("163" - "1402") // -1239

学习了,

基本信息

这是第一行文本。

这是第二行文本。

这是第三行文本。

const element = pitchDataA[index] as PitchData;
var d: any = CoordinateUtil.distance(this.centerLongitude, this.centerLatitude, element.longitude, element.latitude);
element.distanceValue = d;

上面我给distanceValue赋值的dany类型 会不会在这里给安排成了字符串。但是我的Object里的distanceValuenumber类型的啊

你在比较的那个方法里,输出一下他俩的类型不就知道了,,,,

你那个number类型只是一个声明,这不是c,在ts里你声明一个number,给他赋值一个string(转成any)也是可以的,不会报错的。你声明的这个number只是给语法检查看到,然而你把d标记为any,这就导致语法检查不会去检查你这个d到底是不是number,就算是string也一样会赋值。

学习,

在object内部是 number 类型的

distanceValue:number;//距离值用来进行排序使用

HarmonyOS的分布式文件系统让我在多设备间传输文件变得轻松无比。

export default class PitchData {
  id: number;
  pitchId: string;
  title: string;
  content: string;
  imgUrl: string;
  telephone: string;
  position: string;
  positionDetail: string;
  longitude: string;
  latitude: string;
  category: string;
  categoryName: string;
  viewQuantity: number; //摊位被查看次数
  distance: string; //两个坐标点之间的距离
  distanceValue: number; //距离值用来进行排序使用
  type: string;
  pay: string;
  precisePositioning: string;
  pitchStatus: string;
  authenticationStatus: string;
  auditStatus: string;
  auditStatusReason: string; //审核原因
  status: string;
  toppingTime: string;
  updateTime: string; //修改时间
  remark: string; //备注
  
  constructor(pitchId: string, title: string, telephone: string, position: string) {
    this.pitchId = pitchId;
    this.title = title;
    this.telephone = telephone;
    this.position = position;
  }
}

x.DistanceValue和y的值应该都是字符串类型,,,字符串类型的162肯定比1402大啊,,挨个位置比较6比4大的时候比较就结束了,,

DistanceValue是number类型的,

你应该把object里的东西打印出来,你这样我们没法知道内部结构,也不知道是不是你写错了,

姓名: 张三
职位: 软件工程师
简介: 拥有超过10年的软件开发经验,熟悉多种编程语言和技术。在团队中负责设计和实现高质量的软件解决方案。

在HarmonyOS鸿蒙Next中,数组排序时出现162比1402大的情况,可能是由于在比较过程中将数字作为字符串进行处理。字符串比较是按字符的Unicode值逐个比较的,而不是按数值大小。因此,在比较"162"和"1402"时,首先比较第一个字符"1"和"1",相等后比较第二个字符"6"和"4",由于"6"的Unicode值大于"4",所以"162"被认为大于"1402"。要避免这种情况,应在排序时确保将字符串转换为数值后再进行比较。

回到顶部