JavaScript/jQuery组合具有相同优先级的数字
假设我有这个数组JavaScript/jQuery组合具有相同优先级的数字,javascript,jquery,regex,arrays,json,Javascript,Jquery,Regex,Arrays,Json,假设我有这个数组 [1,2,3,4,5,6,7,9] 我要输出的是一个字符串,其中包含: "{1 to 7;9}" 我有以下代码: var _checkbox = [1,2,3,4,5,6,7,9]; for (i=0; i<_checkbox.length; i++) { //if ($($(_checkbox)[i]).is(":checked")) ignore_response_from.push(i+1) } var\u复选框=[1,2,3,4,5,
[1,2,3,4,5,6,7,9]
我要输出的是一个字符串,其中包含:
"{1 to 7;9}"
我有以下代码:
var _checkbox = [1,2,3,4,5,6,7,9];
for (i=0; i<_checkbox.length; i++) {
//if ($($(_checkbox)[i]).is(":checked"))
ignore_response_from.push(i+1)
}
var\u复选框=[1,2,3,4,5,6,7,9];
对于(i=0;i你的意思是:
var _checkbox = [1,2,3,4,5,6,7,9], ignore_response_from= "{";
for (i=0; i<_checkbox.length; i++) {
//if ($($(_checkbox)[i]).is(":checked"))
ignore_response_from += (i+1)+",";
}
ignore_response_from += "}";
var\u复选框=[1,2,3,4,5,6,7,9],忽略来自=“{”的响应;
对于(i=0;i你的意思是:
var _checkbox = [1,2,3,4,5,6,7,9], ignore_response_from= "{";
for (i=0; i<_checkbox.length; i++) {
//if ($($(_checkbox)[i]).is(":checked"))
ignore_response_from += (i+1)+",";
}
ignore_response_from += "}";
var\u复选框=[1,2,3,4,5,6,7,9],忽略来自=“{”的响应;
对于(i=0;i您可以使用Array.filter
创建数组,然后将结果转换为字符串:
function combineEqualPrecedence(arr) {
var combined = arr.filter(
function(a,i,x){
var cando = a-(x[i+1]||0) !== prev;
prev = a-(x[i+1]||0);
return cando;
}, prev = 0
)
,str = [];
for (var i=0;i<combined.length;i+=2){
str.push(combined[i+1] ? combined[i] + ' to '+ combined[i+1] : combined[i])
}
return '{'+str.join('; ')+'}';
}
// usage
combineEqualPrecedence([1,2,3,4,5,6,7,9]);
//=> {1 to 7; 9}
combineEqualPrecedence([1,2,3,4,5,6,7,9,10,11,13,14,15,17]);
//=> {1 to 7; 9 to 11; 13 to 15; 17}
功能组合质量接收(arr){
var组合=arr.filter(
函数(a,i,x){
var cando=a-(x[i+1]| | 0)!==prev;
prev=a-(x[i+1]| | 0);
返回坎多;
},prev=0
)
,str=[];
对于(var i=0;i{1到7;9}
组合质量接受度([1,2,3,4,5,6,7,9,10,11,13,14,15,17]);
//=>{1到7;9到11;13到15;17}
您可以使用Array.filter
创建数组,然后将结果转换为字符串:
function combineEqualPrecedence(arr) {
var combined = arr.filter(
function(a,i,x){
var cando = a-(x[i+1]||0) !== prev;
prev = a-(x[i+1]||0);
return cando;
}, prev = 0
)
,str = [];
for (var i=0;i<combined.length;i+=2){
str.push(combined[i+1] ? combined[i] + ' to '+ combined[i+1] : combined[i])
}
return '{'+str.join('; ')+'}';
}
// usage
combineEqualPrecedence([1,2,3,4,5,6,7,9]);
//=> {1 to 7; 9}
combineEqualPrecedence([1,2,3,4,5,6,7,9,10,11,13,14,15,17]);
//=> {1 to 7; 9 to 11; 13 to 15; 17}
功能组合质量接收(arr){
var组合=arr.filter(
函数(a,i,x){
var cando=a-(x[i+1]| | 0)!==prev;
prev=a-(x[i+1]| | 0);
返回坎多;
},prev=0
)
,str=[];
对于(var i=0;i{1到7;9}
组合质量接受度([1,2,3,4,5,6,7,9,10,11,13,14,15,17]);
//=>{1到7;9到11;13到15;17}
首先想到的是一种方法。是的,它很难看,但似乎有效:
function renderArray(_checkbox) {
var output = [],
rangeStart = 0;
function outputCurrent() {
if (rangeStart < i - 1)
output.push(_checkbox[rangeStart] + " to " + _checkbox[i - 1]);
else
output.push(_checkbox[i - 1]);
rangeStart = i;
}
for (var i = 1; i < _checkbox.length; i++)
if (_checkbox[i] != _checkbox[i - 1] + 1)
outputCurrent();
outputCurrent();
return "{" + output.join("; ") + "}";
}
console.log(renderArray([1,3,4,5,7,9,10,11,14]));
// logs "{1; 3 to 5; 7; 9 to 11; 14}"
函数renderArray(\u复选框){
var输出=[],
rangeStart=0;
函数outputCurrent(){
如果(范围开始
演示:这是我想到的第一个方法。是的,它很难看,但似乎有效:
function renderArray(_checkbox) {
var output = [],
rangeStart = 0;
function outputCurrent() {
if (rangeStart < i - 1)
output.push(_checkbox[rangeStart] + " to " + _checkbox[i - 1]);
else
output.push(_checkbox[i - 1]);
rangeStart = i;
}
for (var i = 1; i < _checkbox.length; i++)
if (_checkbox[i] != _checkbox[i - 1] + 1)
outputCurrent();
outputCurrent();
return "{" + output.join("; ") + "}";
}
console.log(renderArray([1,3,4,5,7,9,10,11,14]));
// logs "{1; 3 to 5; 7; 9 to 11; 14}"
函数renderArray(\u复选框){
var输出=[],
rangeStart=0;
函数outputCurrent(){
如果(范围开始
演示:试试这个
"{" + _checkbox[0] + "to" + _checkbox.slice(_checkbox.length -2).join(';') +"}"
试试这个
"{" + _checkbox[0] + "to" + _checkbox.slice(_checkbox.length -2).join(';') +"}"
这应该可以做到:
var _checkbox = [1,2,3,4,5,6,7,9],
start=null, out= [];
for (i=0; i<_checkbox.length; i++) {
if(start === null) {
if(_checkbox.length < i+1 || _checkbox[i+1] !== _checkbox[i]+1){
out.push(_checkbox[i]);
} else {
start=_checkbox[i];
}
} else {
if(_checkbox.length < i+1 || _checkbox[i+1] !== _checkbox[i]+1){
out.push(start + " to " + _checkbox[i]);
start=null;
}
}
}
console.log( '{' + out.join(';') + '}');
var\u复选框=[1,2,3,4,5,6,7,9],
start=null,out=[];
对于(i=0;i这应该可以做到:
var _checkbox = [1,2,3,4,5,6,7,9],
start=null, out= [];
for (i=0; i<_checkbox.length; i++) {
if(start === null) {
if(_checkbox.length < i+1 || _checkbox[i+1] !== _checkbox[i]+1){
out.push(_checkbox[i]);
} else {
start=_checkbox[i];
}
} else {
if(_checkbox.length < i+1 || _checkbox[i+1] !== _checkbox[i]+1){
out.push(start + " to " + _checkbox[i]);
start=null;
}
}
}
console.log( '{' + out.join(';') + '}');
var\u复选框=[1,2,3,4,5,6,7,9],
start=null,out=[];
对于(i=0;i这里,我还包括了一个基本测试用例:
var tests = [
[1,2,3,4,5,6,7,9],
[1,2,3,4,5,6,7,12,13,14,15,16,20],
[1,2,3,4,5,6,7,12,13,14,15,16,20,21,22,23],
[1,2,3,4,5,6,7,120,13,14,15,16,2890,21,22,23],
[1,2,3,4,8,9,10,11,12,14,16,18,20,21,22,23,30,31,34]
];
var processArray = function(arr, sep) {
var l = arr.length, i, sl, res = [], succ = [];
for (i = 0; i < l; i++) {
var c = (i != 0 && (arr[i - 1] + 1 !== arr[i]));
if ((i == l - 1) || c) {
if (!c) succ.push(arr[i]);
if ((sl = succ.length) > 0) {
res.push(succ[0] + sep + succ[sl - 1]);
succ = [];
}
if (arr[i + 1] - 1 === arr[i]) {
succ.push(arr[i])
} else if (c) {
res.push(arr[i]);
}
} else {
succ.push(arr[i]);
}
}
return res;
}
// setup
for (var i = 0; i < tests.length; i++) {
console.log('Test ' + i + ' : { ' + processArray(tests[i], ' to ').join('; ') + ' }');
}
var测试=[
[1,2,3,4,5,6,7,9],
[1,2,3,4,5,6,7,12,13,14,15,16,20],
[1,2,3,4,5,6,7,12,13,14,15,16,20,21,22,23],
[1,2,3,4,5,6,7,120,13,14,15,16,2890,21,22,23],
[1,2,3,4,8,9,10,11,12,14,16,18,20,21,22,23,30,31,34]
];
var PROCESSARY=函数(arr、sep){
var l=arr.length,i,sl,res=[],succ=[];
对于(i=0;i0){
res.push(成功[0]+sep+succ[sl-1]);
成功=[];
}
如果(arr[i+1]-1===arr[i]){
成功推送(arr[i])
}若否(三){
再推(arr[i]);
}
}否则{
成功推送(arr[i]);
}
}
返回res;
}
//设置
对于(变量i=0;i
这是您的在这里,我还包括了一个基本测试用例:
var tests = [
[1,2,3,4,5,6,7,9],
[1,2,3,4,5,6,7,12,13,14,15,16,20],
[1,2,3,4,5,6,7,12,13,14,15,16,20,21,22,23],
[1,2,3,4,5,6,7,120,13,14,15,16,2890,21,22,23],
[1,2,3,4,8,9,10,11,12,14,16,18,20,21,22,23,30,31,34]
];
var processArray = function(arr, sep) {
var l = arr.length, i, sl, res = [], succ = [];
for (i = 0; i < l; i++) {
var c = (i != 0 && (arr[i - 1] + 1 !== arr[i]));
if ((i == l - 1) || c) {
if (!c) succ.push(arr[i]);
if ((sl = succ.length) > 0) {
res.push(succ[0] + sep + succ[sl - 1]);
succ = [];
}
if (arr[i + 1] - 1 === arr[i]) {
succ.push(arr[i])
} else if (c) {
res.push(arr[i]);
}
} else {
succ.push(arr[i]);
}
}
return res;
}
// setup
for (var i = 0; i < tests.length; i++) {
console.log('Test ' + i + ' : { ' + processArray(tests[i], ' to ').join('; ') + ' }');
}
var测试=[
[1,2,3,4,5,6,7,9],
[1,2,3,4,5,6,7,12,13,14,15,16,20],
[1,2,3,4,5,6,7,12,13,14,15,16,20,21,22,23],
[1,2,3,4,5,6,7,120,13,14,15,16,2890,21,22,23],
[1,2,3,4,8,9,10,11,12,14,16,18,20,21,22,23,30,31,34]
];
var PROCESSARY=函数(arr、sep){
var l=arr.length,i,sl,res=[],succ=[];
对于(i=0;i0){
res.push(成功[0]+sep+succ[sl-1]);
成功=[];
}
如果(arr[i+1]-1===arr[i]){
成功推送(arr[i])
}若否(三){
再推(arr[i]);
}
}否则{
成功推送(arr[i]);
}
}
返回res;
}
//设置
对于(变量i=0;i
下面是呈现输出?您的意思是console.log?:d关于[1,2,9]的内容是什么?输出应该是{1到2,9}?警报(您的输出变量)
?编辑了最后一条语句,请重新检查。niksvp yes bro.Zeta:不是这样…@karaxuna:请重新检查抱歉我的BAD指定如何输出字符串?在哪里输出?渲染输出?你是说console.log?:d关于[1,2,9]的内容是什么?输出应该是{1到2,9}?警报(你的输出变量)
?编辑了最后一条语句,请重新检查。niksvp yes兄弟。泽塔:不,不是…@karaxuna:请重新检查抱歉,我的BAD指定如何输出字符串?在哪里输出?您的文本框失败..