PHP에서 할 수있는 일은 …
range(1, 3); // Array(1, 2, 3)
range("A", "C"); // Array("A", "B", "C")
즉, 상한과 하한을 전달하여 다양한 숫자 또는 문자를 얻을 수있는 기능이 있습니다.
이를 위해 기본적으로 JavaScript가 내장되어 있습니까? 그렇지 않은 경우 어떻게 구현합니까?
답변
번호
[...Array(5).keys()];
=> [0, 1, 2, 3, 4]
문자 반복
String.fromCharCode(...[...Array('D'.charCodeAt(0) - 'A'.charCodeAt(0) + 1).keys()].map(i => i + 'A'.charCodeAt(0)));
=> "ABCD"
되풀이
for (const x of Array(5).keys()) {
console.log(x, String.fromCharCode('A'.charCodeAt(0) + x));
}
=> 0,"A" 1,"B" 2,"C" 3,"D" 4,"E"
기능으로
function range(size, startAt = 0) {
return [...Array(size).keys()].map(i => i + startAt);
}
function characterRange(startChar, endChar) {
return String.fromCharCode(...range(endChar.charCodeAt(0) -
startChar.charCodeAt(0), startChar.charCodeAt(0)))
}
형식화 된 함수로
function range(size:number, startAt:number = 0):ReadonlyArray<number> {
return [...Array(size).keys()].map(i => i + startAt);
}
function characterRange(startChar:string, endChar:string):ReadonlyArray<string> {
return String.fromCharCode(...range(endChar.charCodeAt(0) -
startChar.charCodeAt(0), startChar.charCodeAt(0)))
}
lodash.js _.range()
함수
_.range(10);
=> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
_.range(1, 11);
=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
_.range(0, 30, 5);
=> [0, 5, 10, 15, 20, 25]
_.range(0, -10, -1);
=> [0, -1, -2, -3, -4, -5, -6, -7, -8, -9]
String.fromCharCode(..._.range('A'.charCodeAt(0), 'D'.charCodeAt(0) + 1));
=> "ABCD"
라이브러리가없는 오래된 비 es6 브라우저 :
Array.apply(null, Array(5)).map(function (_, i) {return i;});
=> [0, 1, 2, 3, 4]
console.log([...Array(5).keys()]);
(nils petersohn 및 기타 해설자에 대한 ES6 학점)
답변
숫자의 경우 ES6을 사용할 수 있습니다 Array.from()
, 요즘 모든 작동 IE를 제외한를 :
더 짧은 버전 :
Array.from({length: 20}, (x,i) => i);
더 긴 버전 :
Array.from(new Array(20), (x,i) => i)
0에서 19까지의 배열을 만듭니다. 이것은 다음 형식 중 하나로 더 단축 될 수 있습니다.
Array.from(Array(20).keys())
// or
[...Array(20).keys()]
예를 들어 하한과 상한도 지정할 수 있습니다.
Array.from(new Array(20), (x,i) => i + *lowerBound*)
이를 자세히 설명하는 기사 : http://www.2ality.com/2014/05/es6-array-methods.html
답변
내가 가장 좋아하는 양식 ( ES2015 )
Array(10).fill(1).map((x, y) => x + y)
그리고 step
매개 변수 가있는 함수가 필요한 경우 :
const range = (start, stop, step = 1) =>
Array(Math.ceil((stop - start) / step)).fill(start).map((x, y) => x + y * step)
답변
여기 내 2 센트가 있습니다 :
function range(start, count) {
return Array.apply(0, Array(count))
.map((element, index) => index + start);
}
답변
선택적 단계로 앞뒤로 문자와 숫자에 적용됩니다.
var range = function(start, end, step) {
var range = [];
var typeofStart = typeof start;
var typeofEnd = typeof end;
if (step === 0) {
throw TypeError("Step cannot be zero.");
}
if (typeofStart == "undefined" || typeofEnd == "undefined") {
throw TypeError("Must pass start and end arguments.");
} else if (typeofStart != typeofEnd) {
throw TypeError("Start and end arguments must be of same type.");
}
typeof step == "undefined" && (step = 1);
if (end < start) {
step = -step;
}
if (typeofStart == "number") {
while (step > 0 ? end >= start : end <= start) {
range.push(start);
start += step;
}
} else if (typeofStart == "string") {
if (start.length != 1 || end.length != 1) {
throw TypeError("Only strings with one character are supported.");
}
start = start.charCodeAt(0);
end = end.charCodeAt(0);
while (step > 0 ? end >= start : end <= start) {
range.push(String.fromCharCode(start));
start += step;
}
} else {
throw TypeError("Only string and number types are supported");
}
return range;
}
jsFiddle .
기본 유형을 보강하는 것이 필요한 경우에 지정하십시오 Array.range
.
답변
간단한 범위 기능 :
function range(start, stop, step) {
var a = [start], b = start;
while (b < stop) {
a.push(b += step || 1);
}
return a;
}
BitInt 데이터 형식 을 통합 하기 위해 모든 변수가 동일한 지 확인하는 몇 가지 검사가 포함될 수 있습니다 typeof start
.
function range(start, stop, step) {
var a = [start], b = start;
if (typeof start == 'bigint') {
stop = BigInt(stop)
step = step? BigInt(step): 1n;
} else
step = step || 1;
while (b < stop) {
a.push(b += step);
}
return a;
}
stop
예를 들어에 의해 정의 된 것보다 높은 값을 제거하려면 range(0,5,2)
포함 6
해서는 안됩니다.
function range(start, stop, step) {
var a = [start], b = start;
while (b < stop) {
a.push(b += step || 1);
}
return (b > stop) ? a.slice(0,-1) : a;
}
답변
Array.range= function(a, b, step){
var A= [];
if(typeof a== 'number'){
A[0]= a;
step= step || 1;
while(a+step<= b){
A[A.length]= a+= step;
}
}
else{
var s= 'abcdefghijklmnopqrstuvwxyz';
if(a=== a.toUpperCase()){
b=b.toUpperCase();
s= s.toUpperCase();
}
s= s.substring(s.indexOf(a), s.indexOf(b)+ 1);
A= s.split('');
}
return A;
}
Array.range(0,10);
// [0,1,2,3,4,5,6,7,8,9,10]
Array.range(-100,100,20);
// [-100,-80,-60,-40,-20,0,20,40,60,80,100]
Array.range('A','F');
// ['A','B','C','D','E','F')
Array.range('m','r');
// ['m','n','o','p','q','r']