在PHP中,您可以。。。
range(1, 3); // Array(1, 2, 3)
range("A", "C"); // Array("A", "B", "C")
也就是说,有一个函数可以通过传递上下限来获得一系列数字或字符。
JavaScript本机是否有内置的功能?如果没有,我将如何实施?
在PHP中,您可以。。。
range(1, 3); // Array(1, 2, 3)
range("A", "C"); // Array("A", "B", "C")
也就是说,有一个函数可以通过传递上下限来获得一系列数字或字符。
JavaScript本机是否有内置的功能?如果没有,我将如何实施?
当前回答
只是在Elquent JavaScript中做了这样的练习
function range(start, end, step) {
var ar = [];
if (start < end) {
if (arguments.length == 2) step = 1;
for (var i = start; i <= end; i += step) {
ar.push(i);
}
}
else {
if (arguments.length == 2) step = -1;
for (var i = start; i >= end; i += step) {
ar.push(i);
}
}
return ar;
}
其他回答
我想补充一点,我认为这是一个非常可调的版本,速度非常快。
const range = (start, end) => {
let all = [];
if (typeof start === "string" && typeof end === "string") {
// Return the range of characters using utf-8 least to greatest
const s = start.charCodeAt(0);
const e = end.charCodeAt(0);
for (let i = s; i <= e; i++) {
all.push(String.fromCharCode(i));
}
} else if (typeof start === "number" && typeof end === "number") {
// Return the range of numbers from least to greatest
for(let i = end; i >= start; i--) {
all.push(i);
}
} else {
throw new Error("Did not supply matching types number or string.");
}
return all;
}
// usage
const aTod = range("a", "d");
如果您愿意,也可以使用打字机
const range = (start: string | number, end: string | number): string[] | number[] => {
const all: string[] | number[] = [];
if (typeof start === "string" && typeof end === "string") {
const s: number = start.charCodeAt(0);
const e: number = end.charCodeAt(0);
for (let i = s; i <= e; i++) {
all.push(String.fromCharCode(i));
}
} else if (typeof start === "number" && typeof end === "number") {
for (let i = end; i >= start; i--) {
all.push(i);
}
} else {
throw new Error("Did not supply matching types number or string.");
}
return all;
}
// Usage
const negTenToten: number[] = range(-10, 10) as number[];
受到其他答案的影响。用户已离开。
尚未实施!
使用新的Number.range建议(第1阶段):
[...Number.range(1, 10)]
//=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
这是我模仿Python的解决方案。在底部,您可以找到一些如何使用它的示例。它与数字一起工作,就像Python的范围一样:
var assert = require('assert'); // if you use Node, otherwise remove the asserts
var L = {}; // L, i.e. 'list'
// range(start, end, step)
L.range = function (a, b, c) {
assert(arguments.length >= 1 && arguments.length <= 3);
if (arguments.length === 3) {
assert(c != 0);
}
var li = [],
i,
start, end, step,
up = true; // Increasing or decreasing order? Default: increasing.
if (arguments.length === 1) {
start = 0;
end = a;
step = 1;
}
if (arguments.length === 2) {
start = a;
end = b;
step = 1;
}
if (arguments.length === 3) {
start = a;
end = b;
step = c;
if (c < 0) {
up = false;
}
}
if (up) {
for (i = start; i < end; i += step) {
li.push(i);
}
} else {
for (i = start; i > end; i += step) {
li.push(i);
}
}
return li;
}
示例:
// range
L.range(0) -> []
L.range(1) -> [0]
L.range(2) -> [0, 1]
L.range(5) -> [0, 1, 2, 3, 4]
L.range(1, 5) -> [1, 2, 3, 4]
L.range(6, 4) -> []
L.range(-2, 2) -> [-2, -1, 0, 1]
L.range(1, 5, 1) -> [1, 2, 3, 4]
L.range(0, 10, 2) -> [0, 2, 4, 6, 8]
L.range(10, 2, -1) -> [10, 9, 8, 7, 6, 5, 4, 3]
L.range(10, 2, -2) -> [10, 8, 6, 4]
我在for循环中使用条件三元运算符(不过没有参数测试)。
function range(start,end,step){
var resar = [];
for (var i=start;(step<0 ? i>=end:i<=end); i += (step == undefined ? 1:step)){
resar.push(i);
};
return resar;
};
对于字母,他是我想出的一个生成字母范围的简单JS解决方案。它只用于生成大写或小写字母的数组。
功能范围(第一个,最后一个){var r=[],i=first.charCodeAt(0);而(i<=last.charCodeAt(0)){r.push(String.fromCharCode(i++));}返回r;}console.dir(范围(“a”,“f”));console.dir(范围(“G”,“Z”));