js 数组一些简单应用
把两个数组连接成按从小到大的一个数组例如:
var allowVlan = '23-25,45,4-6,67,50-53';
var unTagVlan = '1-5';
完成时应该是1-6,23-25,45,67,50-53;
本例中用到了数组的方法:
1.数组连接
2.数组包含,
3.数组排序
4、数组去重
备注:listCombinationStr 函数中包括字符串组成list 比如,[1,2,3,5,6,9] ===>>1-3,5-6,9这种形式,getStrCollationPort是强调了下这种形式
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档</title>
<script> window.onload = function(){
// var allowVlan = '23-25,45,4-6,67,50-53';
// var unTagVlan = '20-30';
var allowVlan = '';
var unTagVlan = '1-5';
//重新排序 var arrAllowVlan = vlanListSort(allowVlan);
var arrUnTagVlan = vlanListSort(unTagVlan); alert("arrAllowVlan:"+arrAllowVlan+"arrUnTagVlan:"+arrUnTagVlan);
//判断是不是包含关系
if(includeRelation(arrAllowVlan,arrUnTagVlan)){
/*是包含关系*/
alert('1');
}else{
/*不是包含关系,需要重新组合*/
alert('2'); var tmpArr = arrAllowVlan.concat(arrUnTagVlan);
alert("tmpArr:"+tmpArr);
tmpArr.sort(function(a,b){
return a-b;
});
alert("result:"+listCombinationStr(tmpArr));
}
}; /*判断两个数组是不是包含关系*/
function includeRelation(arrParent,arrChild){ if(arrChild.length > arrParent.length){
return false;
}
for(var i=0;i< arrChild.length;i++){
var bContent = true;
for(var j=0;j<arrParent.length;j++){
if(arrChild[i] == arrParent[j]){
bContent = false;
break;
}
}
if(bContent){
return false;
}
}
return true;
} /*排序*/
function vlanListSort(str){
var newArrAllow = [];
var arrAllow = '';
if(!str.length){
return newArrAllow;
}
arrAllow= str.split(',');
for(var i=0;i<arrAllow.length;i++){
if(arrAllow[i].indexOf('-') != -1){
var tmpArr = arrAllow[i].split('-');
for(var j=parseInt(tmpArr[0]);j<=parseInt(tmpArr[1]);j++){ //这里需要注意下'2'>'12';
newArrAllow.push(j);
}
}else{
newArrAllow.push(parseInt(arrAllow[i]));
}
}
newArrAllow.sort(function(a,b){
return a-b;
}); return newArrAllow;
} /*排好序的数组重新组合成新的列表,可能包含有重复的*/
function listCombinationStr(tmpArr){
var outArr = [];
var outStr = '';
var tmpStr = ''; tmpArr = deleteNumber(tmpArr);
var tmpValue = tmpArr[0];
for(var i=1;i<tmpArr.length;i++){
if(tmpArr[i] == (tmpArr[i-1]+1)){
tmpStr = tmpValue+'-'+tmpArr[i];
if(i == tmpArr.length-1){
outStr += tmpStr+',';
}
}else{
if(tmpStr != ''){
outStr += tmpStr+',';
tmpStr = '';
}else{
outStr += tmpValue+',';
} if(i == tmpArr.length-1){
outStr += tmpArr[i]+',';
}
tmpValue = tmpArr[i];
}
}
outStr = outStr.substring(0,outStr.length-1);
return outStr;
} /*排好序的数组去重*/
function deleteNumber(tmpArr){
var tmp = tmpArr[0]; for(var i=1;i<tmpArr.length;i++){
if(tmpArr[i] == tmp){
tmpArr.splice(i,1);
i--;
}else{
tmp = tmpArr[i];
}
}
return tmpArr;
}
*之前写的是interface gigaethernet1/1/1 or fst1/10/4 这种形式的端口比如2128这种端口是port形式的故以前的不能用*/
function getStrCollationPort(portList){ /*var len = jsonLength(portList);
var s1 = "port";
var prevIndex = 0;
var courrentIndex = 0;
var arrPort = [];
var tmpList = "";
var tmpFirst = 0;
var indexList = ""; for(var i in portList){
arrPort.push(portList[i].substring(s1.length));
}
alert("arrPort.length:"+arrPort.length);
if(arrPort.length == 1){
return arrPort[0].toString();
} alert("arrPort"+arrPort);
var prevIndex = arrPort[0];
tmpFirst = prevIndex;
for(var i=1;i<arrPort.length;i++){
if(parseInt(prevIndex)+1 == parseInt(arrPort[i])){
tmpList = tmpFirst+"-"+arrPort[i];
}else{
if(tmpList != ""){ indexList += tmpList+',';
tmpList = ""; }else{
indexList += prevIndex+',';
}
//最后一个数
if(i == arrPort.length-1){
indexList += arrPort[i];
}
tmpFirst = arrPort[i];
}
prevIndex = arrPort[i];
}
//最后一个数
if(tmpList != ""){
indexList += tmpList;
}
return indexList;
*/
var outArr = [];
var outStr = '';
var tmpStr = '';
var tmpArr = [];
var s1 = "port";
for(var i in portList){
tmpArr.push(portList[i].substring(s1.length));
}
alert("tmpArr:"+tmpArr);
if(tmpArr.length == 1){
return tmpArr[0].toString();
} var tmpValue = tmpArr[0];
for(var i=1;i<tmpArr.length;i++){
if(parseInt(tmpArr[i]) == parseInt(tmpArr[i-1])+1){
tmpStr = tmpValue+'-'+tmpArr[i];
if(i == tmpArr.length-1){
outStr += tmpStr+',';
}
}else{
if(tmpStr != ''){
outStr += tmpStr+',';
tmpStr = '';
}else{
outStr += tmpValue+',';
} if(i == tmpArr.length-1){
outStr += tmpArr[i]+',';
}
tmpValue = tmpArr[i];
}
}
outStr = outStr.substring(0,outStr.length-1);
return outStr;
}
</script>
</head> <body>
</body>
</html>
自己测试了没有什么问题,如果看到的人有什么新的思路,或者其他好的方法,欢迎来踩,一起讨论
js 数组一些简单应用的更多相关文章
- 关于js数组的简单复制
var a=[]; a.push(1); a.push(2); a.push(3); var b=a; b[0]=4; alert(a);//4,2,3 alert(b);//4,2,3 这种写法由于 ...
- js数组和数组去重的几种简单的方法
http://blog.csdn.net/liangklfang/article/details/49300417 1.证明一个对象是数组的方法. 方法(1) [].constructor === A ...
- json、js数组真心不是想得那么简单
之前因为做前台的东西比較少,对于json和js数组的认识仅局限于一种固定格式.这样的固定的思维在开发前台时,特别是近期使用highcharts插件时.让我感到特别不明确.通过查询最终心头的疙瘩解开了. ...
- 小兔JS教程(四)-- 彻底攻略JS数组
在开始本章之前,先给出上一节的答案,参考答案地址: http://www.xiaotublog.com/demo.html?path=homework/03/index2 1.JS数组的三大特性 在J ...
- 转→js数组遍历 千万不要使用for...in...
看到一篇内容还不错,但是排版实在糟糕, 逼死强迫症患者啊,直接拉下去找原文连接,找到了,但是已经消失了···500错误... 第一次因为实在看不下去一篇博客的排版, 为了排版而转载... 转载地址:h ...
- js数组操作大全
原文(http://www.cnblogs.com/webhotel/archive/2010/12/21/1912732.html) 用 js有很久了,但都没有深究过js的数组形式.偶尔用用也就是简 ...
- js数组操作
用 js有很久了,但都没有深究过js的数组形式.偶尔用用也就是简单的string.split(char).这段时间做的一个项目,用到数组的地方很多, 自以为js高手的自己居然无从下手,一下狠心,我学! ...
- js数组操作【转载】
用 js有很久了,但都没有深究过js的数组形式.偶尔用用也就是简单的string.split(char).这段时间做的一个项目,用到数组的地方很多,自以为js高手的自己居然无从下手,一下狠心,我学!呵 ...
- JS 数组去重(数组元素是对象的情况)
js数组去重有经典的 几种方法 但当数组元素是对象时,就不能简单地比较了,需要以某种方式遍历各值再判断是否已出现. 因为: 1.如果是哈希判断法,对象作哈希表的下标,就会自动转换成字符型类型,从而导致 ...
随机推荐
- Golang Middleware Part 1 · To Be A Better Man
如何在Golang中实现中间件-Part 1 当使用net/http包实现服务的时候,一般使用的是如下的两中处理方式: http.HandleFunc http.Handle http.HandleF ...
- win10安装3DSMAX失败,怎么强力卸载删除注册表并重新安装
一些搞设计的朋友在win10系统下安装3DSMAX失败或提示已安装,也有时候想重新安装3DSMAX的时候会出现本电脑windows系统已安装3DSMAX,你要是不留意直接安装3DSMAX,只会安装3D ...
- 转发: python3.7下 Flask-SQLAlchemy中解决1366报错
原链接:https://segmentfault.com/a/1190000010596306 详情: 安装MySQL驱动(我升级过Python,所以要再装一遍) 本想安装MySQL官方驱动mysql ...
- 转:zabbix 更改maps图标
更改Zabbix map图标 Zabbix的maps用来图形化显示监控设备的拓扑图,并且以不同的标记显示故障事件,通过该图表很直观的显示设备的整体情况.系统默认的图标比较简陋,如图十一所示.通过更改系 ...
- Appium移动自动化测试实例-基于python
一.环境搭建 安装Android 环境变量.SDK.Android API.ADT等. 步骤1 安装SDK:下载地址为https://pan.baidu.com/s/1mi6PT9m.如提示错误:' ...
- 12月18日风险投资速递:Facebook收购实时体育数据提供商Sport Stream
国内公司 1.手游公司成都掌沃无限获得近千万元天使投资 成都掌沃无限成立于2013年,是一家新成立的手机游戏开发商,创始人及CEO张涛拥有超过10年的游戏行业从业经验和连续创业经历,其首款游戏产品为& ...
- java的23种设计模式之建造者模式
场景和本质 场景 本质 案例 原理 应用场景 场景和本质 场景 我们要建造一个复杂的产品.比如:神州飞船,Iphone.这个复杂的产品的创建.有这样一个问题需要处理:装配这些子组件是不是有个步骤问题? ...
- 【NOIP14 D2T2】寻找道路
Source and Judge NOIP2014 提高组 D2T2Luogu2296Caioj1567 Problem [Description] 在有向图 G 中,每条边的长度均为 1,现给定起点 ...
- jQuery学习笔记三
使用fadeIn()js解释器会将所选元素的CSS opacity属性从0改为100,fadeTo()会动画显示所选元素,将它为改为某个特定的透明度百分比,使用fadeOut()js解释器会将所选元素 ...
- C++走向远洋——36(数组做数据成员,工资)
*/ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:salarly.cpp * 作者:常轩 * 微信公众号:Worl ...