Nhiều khi viết các hàm khác nhau, chúng ta có thể muốn tạo các dãy để làm việc với một số dữ liệu. Một phạm vi đại diện cho dữ liệu trong một mảng hoặc đối tượng có giá trị đầu và cuối
Rất nhiều ngôn ngữ đã tích hợp sẵn các phương thức để tạo phạm vi, ví dụ như
function charRange[start, stop] { const range = []; const end = stop.charCodeAt[0] for [let i = start.charCodeAt[0]; i [ 'A', 'B', 'C', 'D', 'E', 'F' ]9 trong Ruby
['a'..'e'].to_a => ["a", "b", "c", "d", "e"]
JavaScript không có phương thức tích hợp cụ thể cho việc này, nhưng có nhiều cách chúng ta có thể tạo phạm vi. Chúng tôi sẽ chỉ cho bạn ba
Tìm trận đấu Bootcamp của bạn
- Career Karma kết hợp bạn với các bootcamp công nghệ hàng đầu
- Truy cập học bổng độc quyền và các khóa học chuẩn bị
Tên
Họ
Điện thoại .
By continuing you agree to our Terms of Service and Privacy Policy , and you consent to receive offers and opportunities from Career Karma by telephone, text message, and email.
_. phạm vi [] – Lodash
Nếu chúng ta muốn tạo một dãy số và chúng ta muốn chúng nhanh nhất có thể, chúng ta có thể sử dụng phương thức sử dụng Lodash
function range[start, end] {
if[start === end] return [start];
// recursive case
}
0Phương thức này trả về một mảng và nhận ba đối số. Giá trị đầu tiên cho phần đầu của phạm vi, thứ hai cho phần cuối của phạm vi [tối đa] và thứ ba cho bước hoặc giá trị tăng/giảm theo
_.range[-2]; // => [0, -1] _.range[1, 3]; // => [1, 2] _.range[1, 10, 4]; // => [1, 5, 9]
Lưu ý rằng nếu chỉ có một đối số được cung cấp thì nó sẽ tạo ra một phạm vi lên đến số được chỉ định. Ngoài ra, hãy nhớ rằng Lodash là một thư viện JavaScript mà chúng ta cần cài đặt riêng
Tạo hàm phạm vi [] của riêng chúng tôi
Nếu chúng tôi muốn tiết kiệm một số chi phí, chúng tôi có thể tạo hàm phạm vi số của riêng mình. Hóa ra việc tạo ra phạm vi của riêng chúng ta khá dễ dàng
function range[start, end, step = 1]{ if[start === end] return [start]; const range = []; for[let i = start; i [1, 5, 9] range[1, 10] // => [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Điều này rất dễ viết và chúng ta có thể tránh nhập các thư viện như Lodash chỉ cho một chức năng
Tạo một hàm phạm vi không phải số
Bây giờ bạn có thể hỏi, còn phạm vi không phải số, như ký tự thì sao?
Ở đây, chúng tôi sẽ sử dụng phương pháp
function range[start, end] {
if[start === end] return [start];
// recursive case
}
1 để lấy một số mà sau đó chúng tôi sẽ tăng lên và sau đó đẩy vào một mảng bằng cách sử dụng function range[start, end] {
if[start === end] return [start];
// recursive case
}
2 , trả về một ký tự từ mã ký tựfunction charRange[start, stop] { const range = []; const end = stop.charCodeAt[0] for [let i = start.charCodeAt[0]; i [ 'A', 'B', 'C', 'D', 'E', 'F' ]
Điều đó dễ dàng hơn bạn nghĩ phải không?
Phần kết luận
Bây giờ bạn đã biết việc tự tạo phạm vi bằng JavaScript có thể dễ dàng như thế nào. Vui lòng đảm bảo rằng bạn đã lưu các chức năng tiện dụng này, chúng tôi chắc chắn rằng chúng sẽ được sử dụng vào một lúc nào đó
Bạn đã bao giờ có nhiệm vụ tạo danh sách các số từ đầu đến giá trị cuối chưa? . Có một số cách để giải quyết tình trạng khó khăn này. cho vòng lặp, đệ quy, phương thức
function range[start, end] {
if[start === end] return [start];
// recursive case
}
1, tham số bước, tạo chuỗi ký tự, v.v.Vì vậy, chúng ta cần tạo một hàm phạm vi lấy giá trị bắt đầu và kết thúc, đồng thời trả về danh sách các số trong phạm vi đó. Cách rõ ràng nhất là sử dụng vòng lặp for
cho vòng lặp
Chúng ta lấy giá trị đầu và cuối làm tham số hàm, tạo một mảng trống, sau đó sử dụng vòng lặp for từ giá trị đầu đến cuối để thêm các phần tử vào cuối mảng
function range[start, end] {
const ans = [ ];
for [let i = start; i [0, -1]
_.range[1, 3];
// => [1, 2]
_.range[1, 10, 4];
// => [1, 5, 9]
1Đây là một giải pháp thanh lịch hơn. Nhưng chúng ta có thể đi xa hơn nữa nếu chúng ta sử dụng hàm tạo mới
function range[start, end] {
if[start === end] return [start];
// recursive case
}
5, tạo ra một mảng có n phần tử. Đồng thời, chúng tôi sẽ làm cho mã của chúng tôi rõ ràng và đầy đủ hơnBản đồ phương thức[]
Vì vậy, chúng tôi đã xây dựng một mảng với độ dài nhất định. Bây giờ nếu chúng ta có một danh sách gồm n phần tử, chúng ta có thể tạo một phạm vi từ nó bằng cách ánh xạ mọi phần tử vào chỉ mục của nó, áp dụng
function range[start, end] {
if[start === end] return [start];
// recursive case
}
6. Nhưng mảng vẫn chưa có giá trị phần tử để lặp lại nên hàm map[] không hoạt động. Hãy sử dụng phương thức function range[start, end] {
if[start === end] return [start];
// recursive case
}
7 để điền vào các phần tử mảng các giá trị không xác định. Bây giờ chúng ta có thể sử dụng function range[start, end] {
if[start === end] return [start];
// recursive case
}
6Phương thức
function range[start, end] {
if[start === end] return [start];
// recursive case
}
6 tạo một mảng mới chứa đầy các giá trị là kết quả của việc gọi hàm đã cho một lần cho mỗi phần tử mảng. Nó chấp nhận tối đa 3 tham số. phần tử, chỉ số, mảngBây giờ nếu chúng ta chỉ định 2 tham số giữ chỗ [“
_.range[-2]; // => [0, -1] _.range[1, 3]; // => [1, 2] _.range[1, 10, 4]; // => [1, 5, 9]10” để bỏ qua giá trị ban đầu của phần tử và chỉ mục], chúng ta có thể gán giá trị mới cho phần tử. Sử dụng chức năng mũi tên.
_.range[-2]; // => [0, -1] _.range[1, 3]; // => [1, 2] _.range[1, 10, 4]; // => [1, 5, 9]11
Độ dài của mảng được tính theo công thức
_.range[-2]; // => [0, -1] _.range[1, 3]; // => [1, 2] _.range[1, 10, 4]; // => [1, 5, 9]12 và giá trị của phần tử là
_.range[-2]; // => [0, -1] _.range[1, 3]; // => [1, 2] _.range[1, 10, 4]; // => [1, 5, 9]13. Kết quả cuối cùng sẽ như sau
function range[start, end, step = 1]{ if[start === end] return [start]; const range = []; for[let i = start; i [1, 5, 9] range[1, 10] // => [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]1
Mảng phương thức. từ[]
Phương thức tĩnh
function range[start, end] {
if[start === end] return [start];
// recursive case
}
1 tạo một bản sao mới của một đối tượng giống như mảng hoặc có thể lặp lại. Nó nhận một tham số mapFn có thể, cho phép bạn thực thi hàm map[] cho từng phần tử của mảng đã tạoHàm mũi tên.
_.range[-2]; // => [0, -1] _.range[1, 3]; // => [1, 2] _.range[1, 10, 4]; // => [1, 5, 9]15. Các tham số trong ngoặc đơn được chuyển đến hàm
function range[start, end] {
if[start === end] return [start];
// recursive case
}
6. Vì vậy, chúng tôi tạo một mảng bằng cách chỉ định độ dài của nó trong dấu ngoặc nhọn _.range[-2]; // => [0, -1] _.range[1, 3]; // => [1, 2] _.range[1, 10, 4]; // => [1, 5, 9]17 và sau đó áp dụng phương thức map[]
function range[start, end, step = 1]{ if[start === end] return [start]; const range = []; for[let i = start; i [1, 5, 9] range[1, 10] // => [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]6
tạo trình tự
Khi xử lý các phạm vi lớn, về cơ bản là tạo ra các mảng lớn, chúng ta có thể tối ưu hóa mức tiêu thụ bộ nhớ bằng cách sử dụng trình tạo. Từ khóa
_.range[-2]; // => [0, -1] _.range[1, 3]; // => [1, 2] _.range[1, 10, 4]; // => [1, 5, 9]18 theo sau là [hàm] xác định hàm tạo
Chức năng này khác với chức năng thông thường ở chỗ bạn có thể thoát ra và vào lại. Đồng thời, bối cảnh của nó, tôi. e. giá trị biến được lưu vào các mục tiếp theo. Câu lệnh suất trả về một giá trị và thoát khỏi hàm, trong khi câu lệnh suất* ủy thác việc thực thi cho một hàm khác. Đây là ví dụ của chúng ta sẽ như thế nào
function range[start, end, step = 1]{ if[start === end] return [start]; const range = []; for[let i = start; i [1, 5, 9] range[1, 10] // => [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]8
Chúng ta có thể sử dụng trình tạo này trong
_.range[-2]; // => [0, -1] _.range[1, 3]; // => [1, 2] _.range[1, 10, 4]; // => [1, 5, 9]19 để lặp qua mảng có thể lặp lại, trong trường hợp của chúng tôi là mảng
function range[start, end] {
if[start === end] return [start];
// recursive case
}
2, để xuất kết quả hoặc sử dụng toán tử trải rộng mảng để lấy tất cả các giá trị [điều này tạo ra cùng một mảng như cách tiếp cận không phải trình tạo]function charRange[start, stop] { const range = []; const end = stop.charCodeAt[0] for [let i = start.charCodeAt[0]; i [ 'A', 'B', 'C', 'D', 'E', 'F' ]1
Hầu hết các lập trình viên cố gắng tránh vòng lặp for, chúng ta cũng có thể định nghĩa đệ quy trình tạo, đồng thời kiểm tra xem giá trị bắt đầu và kết thúc có giống nhau không. Hãy điền vào mảng bằng cách sử dụng toán tử trải rộng mảng
function charRange[start, stop] { const range = []; const end = stop.charCodeAt[0] for [let i = start.charCodeAt[0]; i [ 'A', 'B', 'C', 'D', 'E', 'F' ]2
Hãy thêm tham số bước, tôi. e. mỗi số được tạo tiếp theo sẽ thay đổi bao nhiêu. Chúng ta sử dụng phương thức
function range[start, end] {
if[start === end] return [start];
// recursive case
}
1 với tham số mapFn, độ dài mảng sẽ được tính theo công thức function range[start, end, step = 1]{ if[start === end] return [start]; const range = []; for[let i = start; i [1, 5, 9] range[1, 10] // => [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]12 và giá trị phần tử là
function range[start, end, step = 1]{ if[start === end] return [start]; const range = []; for[let i = start; i [1, 5, 9] range[1, 10] // => [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]13 sẽ được viết bằng arrow function
function charRange[start, stop] { const range = []; const end = stop.charCodeAt[0] for [let i = start.charCodeAt[0]; i [ 'A', 'B', 'C', 'D', 'E', 'F' ]6
Bây giờ, hãy thử tạo một chuỗi ký tự, ví dụ: bảng chữ cái. Chúng tôi sẽ sử dụng hàm phạm vi đã có sẵn với tham số bước
Phương thức
function range[start, end, step = 1]{ if[start === end] return [start]; const range = []; for[let i = start; i [1, 5, 9] range[1, 10] // => [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]14 trả về mã ký tự UTF-16 của chuỗi, là một số nguyên từ 0 đến 65535, tham số chỉ mục xác định vị trí của ký tự. Vì các ký tự A và Z trong bảng Unicode được sắp xếp theo thứ tự nên chúng ta có thể sử dụng mã của chúng làm giá trị bắt đầu và kết thúc cho hàm phạm vi, i. e. lần lượt là 65 và 90
Phương thức tĩnh
function range[start, end, step = 1]{ if[start === end] return [start]; const range = []; for[let i = start; i [1, 5, 9] range[1, 10] // => [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]15 trả về một chuỗi được tạo từ một chuỗi mã UTF-16. Tham số num1 chỉ định giá trị mã ký tự. Bây giờ, hãy thêm một hàm map[] để mỗi mã được trả về bởi hàm phạm vi được chuyển đổi thành một ký tự, tôi. e. thư