javascript:查找“跳号”号码
时间:2022-04-23
本文章向大家介绍javascript:查找“跳号”号码,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
业务背景: 航空货运系统中,“货运代理商”会定期从“航空公司”领取一定数量的纸质运单(每张纸上有一个单号),这些单号都是连续的(即:每次可以理解为领取一个“号段”),而且每张单子都要向航空公司交纳一定的费用(即:单号是有价的资产)。
实际使用中,货运代理商希望下级的各营业点连续把单号用完,如果出现未连续使用的情况(即:所谓的跳号),要求快速找出来,给予提醒,提示用户优先使用跳号的运单。(否则这些运单号,一直可能不被注意到,造成浪费,而且每到期末跟航空公司对账时,也对不清楚)
思路:
A:
一个号段的号码,抽象成一个数组;每个号码的使用状态,也抽象成一个等长的数组(Y表示已使用,N表示未使用)
这样使用状态就可形成 类似 "YYYYNNYYNYNNN" 的字符串,只找正则表达式找到 "N...Y"的位置,即为跳号的位置(即:下标值),根据该位置,即可方便取出跳号的号码
B:
如果不使用正则表达式,直接双重循环,也可以查找到,若某一个元素为“N”,在它后面还有"Y",则表示该元素“被跳号”了
1 <!doctype html>
2 <html>
3 <head>
4 <title>find SKip Number</title>
5 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
6 </head>
7 <body>
8 <script type="text/javascript">
9 //号段的运单列表
10 var arrAwbNo = ['001','002','003','004','005','006','007','008','009','010'];
11
12 //该号段的单号使用状态列表(Y已使用,N未使用)
13 var arrStatus =['Y', 'Y', 'N', 'N', 'Y', 'N', 'Y' , 'N', 'Y', 'N'];
14
15 //利用正则表达式查找
16 alert("正则表达式方法查找结果:" + findSkipNumberA(arrAwbNo,arrStatus) );
17
18 //利用循环直接查找
19 alert("双重循环查找结果:" + findSkipNumberB(arrAwbNo,arrStatus) );
20
21 function findSkipNumberA(awbNos, awbStatus){
22 var status = awbStatus.join('');
23 var groups = status.match(/(N+Y)/ig); //利用正则表达式找出 NY,NNY,...,N***Y的跳号部分
24
25 if (groups!=null){
26 var gapIndex = [];
27 //先找到跳号位置的下标索引
28 for(var i = 0;i<groups.length;i++){
29 var g = groups[i];
30 //alert(g); //辅助输出
31 var start = (gapIndex.length<=0 ? 0 : gapIndex[gapIndex.length-1]);
32 start = (start==0 ? 0 : start + g.length);
33
34 var t = status.indexOf(g,start)
35 gapIndex.push(t);
36
37 //NN...Y的处理
38 if (g.length>2){
39 for(var j=1;j<g.length-1;j++){
40 gapIndex.push(t+j);
41 }
42 }
43 }
44
45 //根据索引,直接取出跳号号码
46 var gapNo = [];
47 for(i =0;i<gapIndex.length;i++){
48 gapNo.push(awbNos[gapIndex[i]]);
49 }
50 return gapNo;
51 }
52
53 return null;
54 }
55
56 function findSkipNumberB(awbNos, awbStatus){
57 var skipNumbers = [];
58 for(var i=0 ; i<arrStatus.length-1 ; i++){
59 for(var j=i+1 ; j<arrStatus.length; j++){
60 if (awbStatus[i]=="N" && awbStatus[j]=="Y"){
61 skipNumbers.push(awbNos[i]);
62 break;
63 }
64 }
65 }
66 return skipNumbers;
67 }
68
69 </script>
70 </body>
71 </html>
C#的实现:
1 static String[] findSkipNumberA(Regex reg, String[] awbNos, String awbStatus)
2 {
3 //Regex reg = new Regex("N+Y", RegexOptions.Compiled);
4 List<string> result = new List<string>();
5
6 MatchCollection matchs = reg.Matches(awbStatus);
7
8 int findStartIndex = 0;
9 foreach (Match m in matchs)
10 {
11 String matchValue = m.Groups[0].Value;
12 findStartIndex = awbStatus.IndexOf(matchValue, (findStartIndex > 0 ? findStartIndex + 1 : 0));
13 for (int i = 0; i < matchValue.Length - 1; i++)
14 {
15 result.Add(awbNos[findStartIndex + i]);
16 }
17
18 findStartIndex += (matchValue.Length - 1);//更新下次IndexOf查找的起始位置
19 }
20
21 return result.ToArray();
22 }
23
24 static String[] findSkipNumberB(String[] awbNos, String[] awbStatus)
25 {
26 List<string> result = new List<string>();
27 for (int i = 0; i < awbStatus.Length - 1; i++)
28 {
29 for (int j = i + 1; j < awbStatus.Length; j++)
30 {
31 if (awbStatus[i] == "N" && awbStatus[j] == "Y")
32 {
33 result.Add(awbNos[i]);
34 break;
35 }
36 }
37 }
38 return result.ToArray();
39 }
c#版实际测试下来,如果数组较大(>200),正则表达式方式优势明显;数组较小于时,手动双重循环更快
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法