js sort()函数 排序问题 var arr =['A-1-5-1','A-1-10-2','A-1-5-5','B-2-3-1','C-4-10-1'], 对这个数组进行排序,想达到的效果是["A-1-5-1", "A-1-5-5", "A-4-10-1", "A-1-10-2", "A-2-3-1"]
先介绍个方法
charCodeAt() 方法可返回指定位置的字符的 Unicode 编码。这个返回值是 0 - 65535 之间的整数。
stringObject.charCodeAt(index)
| 参数 | 描述 |
|---|---|
| index | 必需。表示字符串中某个位置的数字,即字符在字符串中的下标。 |
简言之 就是获取字符串第一个字符的Unicode 编码,index说是必填 你不填的话默认为0 即第一位的编码值。
var arr = ['A-1-5-1','B-2-3-1','C-4-10-1','A-1-10-2','A-1-5-5']
// console.log(arr)
arr.sort(compare);
function compare(a,b) {
if(a.charCodeAt(0) === b.charCodeAt(0)){
// console.log('a:'+a);
// console.log('b:'+b);
let arr1 = a.split('-');
let arr2 = b.split('-');
arr1.shift();
arr2.shift();
return sortBL(arr1,arr2);
} else {
// console.log(a);
// console.log(b);
// console.log('----------------------')
return a.charCodeAt(0) - b.charCodeAt(0);
}
}
function sortBL(arr1,arr2) {
if(arr1.length < 1 || arr2.length < 1 ) {
return arr1[0] - arr2[0];
}
if(arr1[0] === arr2[0] && arr1[1] !== arr2[1]) {
// console.log('2222222')
return arr1[1] - arr2[1];
} else {
// console.log('3333333')
arr1.shift();
arr2.shift();
return sortBL(arr1,arr2);
}
}
console.log(arr)
可能打印比较多 是为了看看 sort() 方法到底是如何执行的。结果与我想的不一样。
我以为比较时应该是 数组第一个值是a 第二个值是b . 但是打印出结果 是这样的

注意看下面的 后面的值是a :A-1-5-5 前面的值是b: A-1-10-2 这样就好理解了 比较的时候 是比较相邻的两个数。 但是,是从后往前推得 相邻的俩个数先比较 如果后面的数小 就往前推一位 (就是与前面的数互换位置) 然后一直往前比较 如果小就停在当前位置,大就再往前推一位。
我的理解是这样的 不知道对不对 希望有大神能指点指点。
js sort()函数 排序问题 var arr =['A-1-5-1','A-1-10-2','A-1-5-5','B-2-3-1','C-4-10-1'], 对这个数组进行排序,想达到的效果是["A-1-5-1", "A-1-5-5", "A-4-10-1", "A-1-10-2", "A-2-3-1"]的更多相关文章
- [bug] JS sort 函数在 ios 中无效
首先,请原谅我做一次标题党: 但我觉得从发现问题到最后解决问题的过程还是蛮有意思的,特此记录一下: 背景 近两天开发的航班延误宝是内嵌在客户端(android.ios)webview 中的 H5 页面 ...
- js sort方法根据数组中对象的某一个属性值进行排序(实用方法)
js sort方法根据数组中对象的某一个属性值进行排序 sort方法接收一个函数作为参数,这里嵌套一层函数用来接收对象属性名,其他部分代码与正常使用sort方法相同. var arr = [ {nam ...
- 求数组的最小数、最大值,求一组数的平均数,sort函数详解,类数组转数组
求数组的最小值和最大值 //求数组当中最大值和最小值 var arr=[3,2,6,1,45,23,456,23,2,6,3,45,37,89,30]; //第一种方法 根据排序方法来求最大值和最小值 ...
- js sort方法根据数组中对象的某一个属性值进行排序
sort方法接收一个函数作为参数,这里嵌套一层函数用来接收对象属性名,其他部分代码与正常使用sort方法相同. var arr = [ {name:'zopp',age:0}, {name:'gpp' ...
- 关于js sort排序方法
sort() 方法用于对数组的元素进行排序. 语法:arrayObject.sort(sortby):参数sortby可选.规定排序顺序.必须是函数. 当方法不带参数的时候,将按照字符编码顺序进行排序 ...
- js Date 函数方法及日期计算
js Date 函数方法 var myDate = new Date(); myDate.getYear(); //获取当前年份(2位) myDate.getFullYear(); //获取完整的年份 ...
- Js数组排序函数sort()
JS实现多维数组和对象数组排序,用的其实就是原生sort()函数,语法为:arrayObject.sort(sortby)(sortby 可选.规定排序顺序.必须是函数.) 返回值为对数组的引用:请注 ...
- Js数组排序函数:sort()
原文链接:https://blog.csdn.net/qq_37936542/article/details/78979521 js原生的 sort() 排序函数使用起来很方便 语法:arrayObj ...
- js -- sort() 使用排序函数
JavaScript sort() 方法 JavaScript Array 对象 定义和用法 sort() 方法用于对数组的元素进行排序. 语法 arrayObject.sort(sortby) 参数 ...
随机推荐
- Qt 学习之路问题
Qt5 cannot include the file QMainWindow add "greaterThan(QT_MAJOR_VERSION, 4): QT += widgets&qu ...
- Hololens官方教程精简版 - 08. Sharing holograms(共享全息影像)
前言 注意:本文已更新到5.5.1f1版本号 本篇集中学习全息影像"共享"的功能,以实如今同一房间的人,看到"同一个物体".之所以打引號,是由于.每一个人看到的 ...
- mongodb官网文档阅读笔记:与写性能相关的几个因素
Indexes 和全部db一样,索引肯定都会引起写性能的下降,mongodb也没啥特别的,相对索引对读性能的提示,这些消耗通常是能够接受的,所以该加入的索引还是要加入.当然须要慎重一些.扯点远的,以前 ...
- [Atcoder Grand 006 C] Rabbit Exercise 解题报告 (期望)
题目链接:https://www.luogu.org/problemnew/show/AT2164 https://agc006.contest.atcoder.jp/tasks/agc006_c 题 ...
- ckeidtor编辑器添加图片上传功能
1.ckeditor默认没有上传图片功能,只能通过Url显示图片,图下图 2.首先说明,ckeditor是有上传功能的,只是隐藏了,需要通过配置让它显示 找到ckeditor/plugins/imag ...
- Leaflet学习笔记(一)
一.简介 Leaflet是一个主要适用于移动端交互地图的领先的开源javascript库.虽然js库只有38KB左右,但是却能满足大部分开发者的所有功能需求. Leaflet拥有着简单,高效和实用的设 ...
- Liunx-php7安装swoole扩展
Liunx-php7安装swoole扩展 标签(空格分隔): php 下载包 https://github.com/swoole/swoole-src/releases 安装过程 直接wget也行直接 ...
- jquery的append/prepend和after/before有什么区别呢?
append <p> <span class="s1">s1</span> </p> <script> $(" ...
- html页面颜色名称和颜色值转换
public static string ToHtmlColor(string colorName) { try { if (colorName.StartsWith("#")) ...
- @synchronized 再考察
核心是:将标示对象与锁建立关联. 线程 锁 标识: 异常: NSString *test = @"test"; @try { // Allocates a lock for ...