Mối nối JavaScript có bị phá hủy không?
Trong bài viết trước của tôi, chúng ta đã tìm hiểu sâu về phương thức 9 trên API mảng JavaScript. Lần này tôi muốn thu nhỏ và xem xét tất cả các phương thức mảng JavaScript. Vâng, không phải tất cả. Tôi chỉ muốn tập trung vào những phương pháp không phá hủy; Show
Với React cũng như một số giải pháp quản lý trạng thái, tính bất biến là chìa khóa. Vì vậy, chẳng hạn, việc thay đổi mảng là điều không nên. Vì vậy, bây giờ tôi đã quen với việc tránh những phương thức làm thay đổi mảng khi có thể Vì vậy, hãy xem các phương thức không phá hủy trên JavaScript Array API. Hy vọng, chúng ta có thể học được điều gì đó mới const LETTER_G_CHAR_CODE = 71 const names = ['Aidan', 'Ben', 'David', 'Faraz', 'Kyle', 'Jonathan', 'Tyler'] const aToGNames = names.filter( (name) => name.charCodeAt(0) <= LETTER_G_CHAR_CODE, ) console.log(aToGNames) // ['Aidan', 'Ben', 'David', 'Faraz']0Phương thức 0 tạo một mảng mới được điền với kết quả của việc gọi hàm được cung cấp trên mọi phần tử của mảng
Tất nhiên, phương pháp 0 có thể được sử dụng trong các trường hợp phức tạp hơn nhiều như ánh xạ qua các chuỗi để tạo các lời hứa chạy song song
Hãy xem bài đăng trước đây của tôi về Khám phá các phương pháp JavaScript Promise API để tìm hiểu thêm về cách thức hoạt động của 3 và các phương pháp khácconst LETTER_G_CHAR_CODE = 71 const names = ['Aidan', 'Ben', 'David', 'Faraz', 'Kyle', 'Jonathan', 'Tyler'] const aToGNames = names.filter( (name) => name.charCodeAt(0) <= LETTER_G_CHAR_CODE, ) console.log(aToGNames) // ['Aidan', 'Ben', 'David', 'Faraz']4Phương thức 4 tạo một mảng mới với tất cả các phần tử vượt qua bài kiểm tra được thực hiện bởi hàm được cung cấp
Nhiều lần tôi kết hợp 0 và 4 với nhau trong quá trình chuyển đổi dữ liệu của mình 2Phương thức 8 cũng không phá hủy vì nó tạo ra chuỗi, nhưng tôi sẽ không đề cập đến nó trong bài đăng nàyconst urlsToFetch = [ 'https://swapi.dev/api/people/', 'https://stats.nba.com/stats/playerindex', 'https://api.github.com/users/benmvp/repos', ] const fetchPromises = urlsToFetch.map((url) => fetchJson(url)) Promise.all(fetchPromises).then( ([starWarsPeople, nbaPlayers, myRepositories]) => { // Use fetched data }, )9Phương thức 9 chạy một hàm (được gọi là “bộ giảm tốc”) trên mỗi phần tử của mảng, dẫn đến một giá trị đầu ra duy nhất có thể là một mảng mới, một đối tượng, một số, v.v. 6Đọc bài viết Tìm hiểu phương pháp rút gọn mảng bằng cách triển khai lại các hàm lodash để tìm hiểu thêm về sức mạnh của 9const LETTER_G_CHAR_CODE = 71 const names = ['Aidan', 'Ben', 'David', 'Faraz', 'Kyle', 'Jonathan', 'Tyler'] const aToGNames = names.filter( (name) => name.charCodeAt(0) <= LETTER_G_CHAR_CODE, ) console.log(aToGNames) // ['Aidan', 'Ben', 'David', 'Faraz']22 / const LETTER_G_CHAR_CODE = 71 const names = ['Aidan', 'Ben', 'David', 'Faraz', 'Kyle', 'Jonathan', 'Tyler'] const aToGNames = names.filter( (name) => name.charCodeAt(0) <= LETTER_G_CHAR_CODE, ) console.log(aToGNames) // ['Aidan', 'Ben', 'David', 'Faraz']23Các phương pháp 22 và 23 là bạn đồng hành của nhauPhương thức 22 trả về 27 hoặc 28 dựa trên việc ít nhất một phần tử trong mảng có vượt qua bài kiểm tra được thực hiện bởi hàm được cung cấp hay không 5Phương thức 23 cũng trả về 27 hoặc 28, nhưng dựa trên việc tất cả các phần tử trong mảng có vượt qua bài kiểm tra được thực hiện bởi hàm được cung cấp hay không 9const LETTER_G_CHAR_CODE = 71 const names = ['Aidan', 'Ben', 'David', 'Faraz', 'Kyle', 'Jonathan', 'Tyler'] const aToGNames = names.filter( (name) => name.charCodeAt(0) <= LETTER_G_CHAR_CODE, ) console.log(aToGNames) // ['Aidan', 'Ben', 'David', 'Faraz']62 / const LETTER_G_CHAR_CODE = 71 const names = ['Aidan', 'Ben', 'David', 'Faraz', 'Kyle', 'Jonathan', 'Tyler'] const aToGNames = names.filter( (name) => name.charCodeAt(0) <= LETTER_G_CHAR_CODE, ) console.log(aToGNames) // ['Aidan', 'Ben', 'David', 'Faraz']63 62 và 63 cũng là bạn đồng hành của nhauPhương thức 62 trả về giá trị của phần tử đầu tiên trong mảng vượt qua bài kiểm tra được thực hiện bởi hàm được cung cấp 5Thay vào đó, phương thức 63 có liên quan trả về chỉ mục của giá trị của phần tử đầu tiên trong mảng vượt qua bài kiểm tra được thực hiện bởi hàm được cung cấp. Nó trả về 68 nếu không có phần tử 8Tôi thường sử dụng phương pháp 62. Tôi chỉ có xu hướng sử dụng 63 khi tôi cần chỉ mục để lập chỉ mục vào một mảng khác hoặc lưu trữ vị trí của nóconst LETTER_G_CHAR_CODE = 71 const names = ['Aidan', 'Ben', 'David', 'Faraz', 'Kyle', 'Jonathan', 'Tyler'] const aToGNames = names.filter( (name) => name.charCodeAt(0) <= LETTER_G_CHAR_CODE, ) console.log(aToGNames) // ['Aidan', 'Ben', 'David', 'Faraz']51 / const LETTER_G_CHAR_CODE = 71 const names = ['Aidan', 'Ben', 'David', 'Faraz', 'Kyle', 'Jonathan', 'Tyler'] const aToGNames = names.filter( (name) => name.charCodeAt(0) <= LETTER_G_CHAR_CODE, ) console.log(aToGNames) // ['Aidan', 'Ben', 'David', 'Faraz']52 / const LETTER_G_CHAR_CODE = 71 const names = ['Aidan', 'Ben', 'David', 'Faraz', 'Kyle', 'Jonathan', 'Tyler'] const aToGNames = names.filter( (name) => name.charCodeAt(0) <= LETTER_G_CHAR_CODE, ) console.log(aToGNames) // ['Aidan', 'Ben', 'David', 'Faraz']53 51, 52 và 53 đều là các phương pháp đồng hành và cũng có liên quan chặt chẽ với 62 và 63. Các phương thức find nhận một hàm kiểm tra, trong khi đó 51, 52 và 53 nhận một giá trịPhương thức 51 (được thêm vào trong ES2016) trả về 27 hoặc 28 dựa trên việc mảng có bao gồm giá trị được cung cấp trong số các mục của nó hay không 5Trước khi bổ sung phương pháp 51 vào thông số kỹ thuật ECMAScript, cách để kiểm tra việc đưa vào là với 96. Phương thức 52 trả về chỉ mục của phần tử đầu tiên trong mảng được tìm thấy, trả về 68 nếu không có 0Tôi chỉ thực sự bao gồm 53 cho đầy đủ. Tôi không chắc lần cuối tôi sử dụng nó là khi nào. Nhưng 53 hoạt động giống như 52 ngoại trừ nó hoạt động ngược từ cuối mảng. Tôi tưởng tượng nó chỉ hữu ích nếu mảng có các bản sao và bạn cần cái cuối cùng vì một lý do nào đóconst names = ['Aidan', 'Ben', 'David', 'Faraz', 'Kyle', 'Jonathan', 'Tyler'] const uppercaseNames = names.map((name) => name.toLocaleUpperCase()) console.log(uppercaseNames) // ['AIDAN', 'BEN', 'DAVID', 'FARAZ', 'KYLE', 'JONATHAN', 'TYLER']52Phương thức 52 hợp nhất hai hoặc nhiều mảng lại với nhau, trả về một mảng mới 1Theo quan điểm của tôi, tất cả đều lỗi thời. Và không phải vì nó không phải là một hoạt động hữu ích. Tôi vừa thay thế nó bằng toán tử trải rộng 2Ồ và cả 52 và toán tử trải đều có thể được sử dụng để tạo một bản sao nông của một mảng 3const names = ['Aidan', 'Ben', 'David', 'Faraz', 'Kyle', 'Jonathan', 'Tyler'] const uppercaseNames = names.map((name) => name.toLocaleUpperCase()) console.log(uppercaseNames) // ['AIDAN', 'BEN', 'DAVID', 'FARAZ', 'KYLE', 'JONATHAN', 'TYLER']55 / const names = ['Aidan', 'Ben', 'David', 'Faraz', 'Kyle', 'Jonathan', 'Tyler'] const uppercaseNames = names.map((name) => name.toLocaleUpperCase()) console.log(uppercaseNames) // ['AIDAN', 'BEN', 'DAVID', 'FARAZ', 'KYLE', 'JONATHAN', 'TYLER']56Các phương thức 55 và 56 (ES2019) là một cặp phương thức đồng hành khácPhương thức 55 tạo một mảng mới từ việc làm phẳng mảng theo số cấp độ đã chỉ định sâu (mặc định là một cấp độ) 4Phương thức 56 tạo một mảng mới bằng cách gọi hàm được cung cấp trên mọi phần tử của mảng, sau đó làm phẳng kết quả một cấp 5Vì vậy, 56 về cơ bản là một phiên bản gọi hiệu quả hơn một chút 0 theo sau là 55const names = ['Aidan', 'Ben', 'David', 'Faraz', 'Kyle', 'Jonathan', 'Tyler'] const uppercaseNames = names.map((name) => name.toLocaleUpperCase()) console.log(uppercaseNames) // ['AIDAN', 'BEN', 'DAVID', 'FARAZ', 'KYLE', 'JONATHAN', 'TYLER']84Cuối cùng, phương thức 84 tạo một mảng mới là bản sao nông của một phần của mảng từ chỉ mục 86 đã chỉ định cho đến (nhưng không bao gồm) chỉ mục 87 tùy chọn 6Tôi thường sử dụng 84 khi xây dựng logic cho giao diện người dùng kết quả tìm kiếm được phân trang 7Phương thức 84 cũng có thể được sử dụng để tạo một bản sao nông của một mảng 8Phù, thế là xong. 😅 Cho dù chúng ta đang thực hiện API hay giao diện người dùng trong JavaScript, thì các phương thức mảng không phá hủy này chắc chắn sẽ hữu ích. Khi tôi thao tác dữ liệu nặng, tôi thấy mình sử dụng tất cả chúng. Bạn sử dụng cái nào? Là mối nối một phương pháp phá hoại?Phương thức mảng mối nối (). Các. phương thức splice() là một phương thức mảng hủy diệt giúp sửa đổi mảng ban đầu và trả về (các) mục đã loại bỏ trong một mảng. Đối số đầu tiên trong phương thức mối nối chỉ ra chỉ mục trong mảng để bắt đầu thêm hoặc xóa các phần tử.
JavaScript có phá hoại lát cắt không?slice() là một phương thức của Đối tượng mảng và Đối tượng chuỗi. Nó không phá hủy vì nó trả về một bản sao mới và nó không thay đổi nội dung của mảng đầu vào. slice() thường được sử dụng trong lập trình chức năng để tránh tác dụng phụ.
Cái nào tốt hơn lát hoặc nối?Slice dùng để lấy một mảng mới từ mảng ban đầu trong khi splice dùng để thêm/xóa các phần tử trong mảng ban đầu . Các thay đổi không được phản ánh trong mảng ban đầu trong trường hợp lát cắt và trong mối nối, các thay đổi được phản ánh trong mảng ban đầu.
Độ phức tạp về thời gian của mối nối JavaScript là gì?Vấn đề với mối nối là nó có độ phức tạp về thời gian O(n) trong trường hợp xấu nhất. |