假设我有以下复选框:
<input type="checkbox" value="1-25" />
为了得到定义我正在寻找的范围边界的两个数字,我使用下面的jQuery:
var value = $(this).val();
var lowEnd = Number(value.split('-')[0]);
var highEnd = Number(value.split('-')[1]);
然后,我如何创建一个包含lowEnd和highEnd之间的所有整数的数组,包括lowEnd和highEnd本身?对于这个特定的例子,显然,结果数组将是:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25]
在JavaScript ES6中:
函数范围(start, end) {
返回Array(end - start + 1).fill()。Map ((_, idx) => start + idx)
}
Var结果= range(9,18);// [9,10,11,12,13,14,15,16,17,18]
console.log(结果);
为了完整起见,这里有一个可选的step参数。
函数范围(start, end, step = 1) {
const len =数学。楼层((结束-开始)/台阶)+ 1
返回数组(len) .fill()。Map ((_, idx) => start + (idx * step))
}
Var结果= range(9,18,0.83);
console.log(结果);
我会在实际项目中使用npm的range-inclusive。它甚至支持后退,这很酷。
如果开始总是小于结束,我们可以这样做:
function range(start, end) {
var myArray = [];
for (var i = start; i <= end; i += 1) {
myArray.push(i);
}
return myArray;
};
console.log(range(4, 12)); // → [4, 5, 6, 7, 8, 9, 10, 11, 12]
如果我们希望能够使用第三个参数来修改用于构建数组的步骤,并且即使开始值大于结束值也能使其工作:
function otherRange(start, end, step) {
otherArray = [];
if (step == undefined) {
step = 1;
};
if (step > 0) {
for (var i = start; i <= end; i += step) {
otherArray.push(i);
}
} else {
for (var i = start; i >= end; i += step) {
otherArray.push(i);
}
};
return otherArray;
};
console.log(otherRange(10, 0, -2)); // → [10, 8, 6, 4, 2, 0]
console.log(otherRange(10, 15)); // → [10, 11, 12, 13, 14, 15]
console.log(otherRange(10, 20, 2)); // → [10, 12, 14, 16, 18, 20]
这样,函数接受正步长和负步长,如果没有给出步长,则默认为1。