Web开发新手求助:JavaScript中按endOffset排序对象数组
按endOffset排序对象数组的正确做法
嘿,作为Web开发新手,能尝试用sort方法处理数组已经很棒啦~不过你现在的问题很明确:你想基于endOffset排序,但代码里用的是startOffset,这就是结果不符合预期的原因!
另外还要注意一个小细节:你的endOffset和startOffset都是字符串类型(比如"50"),虽然JavaScript在做减法时会自动把字符串转成数字,但显式转换类型会让代码更严谨,避免一些潜在的bug(比如如果字符串里有非数字内容的话)。
正确的排序代码
方式1:隐式类型转换(简单直接)
const jsonDataArray = [ { endOffset: "50", startOffset: "25", type: "Education" }, { endOffset: "67", startOffset: "55", type: "address" }, { endOffset: "65", startOffset: "59", type: "project" }, { endOffset: "80", startOffset: "70", type:"fullname" } ]; // 把startOffset改成endOffset即可 jsonDataArray.sort(function (a, b) { return a.endOffset - b.endOffset; });
方式2:显式转数字(更严谨)
jsonDataArray.sort(function (a, b) { // 用Number()或者parseInt()把字符串转成数字 return Number(a.endOffset) - Number(b.endOffset); });
排序后的结果
执行上面的代码后,数组会按endOffset从小到大排序,结果如下:
[ { endOffset: "50", startOffset: "25", type: "Education" }, { endOffset: "65", startOffset: "59", type: "project" }, { endOffset: "67", startOffset: "55", type: "address" }, { endOffset: "80", startOffset: "70", type:"fullname" } ]
小拓展:如果要降序排序
要是你想按endOffset从大到小排,只需要调换a和b的位置就行:
jsonDataArray.sort(function (a, b) { return Number(b.endOffset) - Number(a.endOffset); });
简单说,sort方法的回调函数返回值规则是:
- 返回负数:a排在b前面
- 返回正数:b排在a前面
- 返回0:位置不变
这样调整后,你就能得到想要的排序结果啦~
内容的提问来源于stack exchange,提问作者ganesh kaspate
相关产品推荐
相关产品推荐

