Hướng dẫn convert dot notation to object javascript - chuyển đổi ký hiệu dấu chấm thành đối tượng javascript
Đây là một lớp lót một lớp thanh lịch ngắn hơn 10 lần so với các giải pháp khác:
[Chỉnh sửa] hoặc trong Ecmascript 6:
. Đáp lại những người vẫn còn sợ sử dụng 3 mặc dù nó đang ở trong tiêu chuẩn ECMA-262 (Phiên bản thứ 5), đây là triển khai đệ quy hai dòng:
Tùy thuộc vào tối ưu hóa mà trình biên dịch JS đang thực hiện, bạn có thể muốn đảm bảo bất kỳ chức năng lồng nào được xác định lại trên mỗi cuộc gọi thông qua các phương thức thông thường (đặt chúng vào một phần đóng, đối tượng hoặc không gian tên toàn cầu). edit:: Để trả lời một câu hỏi thú vị trong các bình luận:
. Phong cách 3 không thực sự phù hợp với điều đó, nhưng chúng ta có thể sửa đổi việc thực hiện đệ quy:
Demo:
... Mặc dù cá nhân tôi khuyên bạn nên tạo một chức năng riêng biệt 7. Tôi muốn kết thúc một nốt phụ mà người đăng ký ban đầu của câu hỏi có thể (nên?) Làm việc với các mảng chỉ số (mà họ có thể nhận được từ 8), thay vì chuỗi; Mặc dù thường không có gì sai với chức năng tiện lợi.Một người bình luận hỏi:
JavaScript là một ngôn ngữ rất kỳ lạ; Nói chung, các đối tượng chỉ có thể có các chuỗi làm khóa tài sản của chúng, vì vậy, ví dụ nếu 9 là một đối tượng chung như 0, thì 1 sẽ trở thành ________ 22 ... bạn đọc đúng ... yup ...Các mảng JavaScript (bản thân chúng là các trường hợp của đối tượng) đặc biệt khuyến khích các khóa số nguyên, mặc dù bạn có thể làm một cái gì đó như 3.Nhưng nói chung (và có những trường hợp ngoại lệ), 4 (khi nó được phép; bạn không thể làm 5).. Vì vậy, câu trả lời cho câu hỏi của bạn sẽ phụ thuộc vào việc bạn có giả sử các đối tượng đó chỉ chấp nhận số nguyên (do hạn chế trong miền vấn đề của bạn) hoặc không. Hãy giả sử không. Sau đó, một biểu thức hợp lệ là sự kết hợp của một định danh cơ sở cộng với một số 6 cộng với một số 7s.Chúng ta hãy bỏ qua một lúc mà tất nhiên chúng ta có thể làm những việc khác một cách hợp pháp trong ngữ pháp như 8; Số nguyên không phải là (đó) 'Đặc biệt'.Tuyên bố của người bình luận sau đó sẽ tương đương với 9, mặc dù có lẽ chúng ta cũng nên hỗ trợ 0. Bạn sẽ phải kiểm tra phần ngữ pháp Ecmascript trên các chuỗi chữ để xem làm thế nào để phân tích một chuỗi hợp lệ theo nghĩa đen. Về mặt kỹ thuật, bạn cũng muốn kiểm tra (không giống như trong câu trả lời đầu tiên của tôi) rằng 1 là định danh JavaScript hợp lệ.Mặc dù vậy, một câu trả lời đơn giản cho câu hỏi của bạn, nếu chuỗi của bạn không chứa dấu phẩy hoặc dấu ngoặc, sẽ chỉ là phù hợp với độ dài 1+ chuỗi ký tự không có trong tập 2 hoặc 3 hoặc 4:
Nếu các chuỗi của bạn không chứa ký tự thoát hoặc các ký tự 5 và vì định danh là một ngôn ngữ phụ của StringLiterals (tôi nghĩ ???) trước tiên bạn có thể chuyển đổi các dấu chấm của mình thành []:
Tất nhiên, luôn luôn cẩn thận và không bao giờ tin tưởng dữ liệu của bạn. Một số cách xấu để làm điều này có thể hoạt động cho một số trường hợp sử dụng cũng bao gồm:
Chỉnh sửa đặc biệt 2018: Chúng ta hãy đi vòng tròn đầy đủ và làm giải pháp không hiệu quả nhất, không thể hiểu được khủng khiếp mà chúng ta có thể đưa ra ... vì lợi ích của Purityhamfistery cú pháp. Với các đối tượng proxy ES6! ... Chúng ta cũng định nghĩa một số thuộc tính mà (IMHO vẫn ổn và tuyệt vời nhưng) có thể phá vỡ các thư viện được viết không đúng cách. Có lẽ bạn nên cảnh giác khi sử dụng điều này nếu bạn quan tâm đến hiệu suất, sự tỉnh táo (của bạn hoặc người khác '), công việc của bạn, v.v.
Demo:
Output:
Ý tưởng không hiệu quả: Bạn có thể sửa đổi điều trên để gửi dựa trên đối số đầu vào; Hoặc sử dụng phương thức 6 để hỗ trợ 7 hoặc nếu 8, thì chỉ cần chấp nhận một mảng làm đầu vào như 9.Theo đề xuất rằng có thể bạn muốn xử lý các chỉ số không xác định theo cách thức 'mềm hơn' (ví dụ: 0 trả về không xác định thay vì kiểu mẫu không bị tổn thương) ...:
Điều đó nói rằng, bạn sẽ thực hiện công việc này bằng cách thay thế chức năng giảm của mình bằng: 2, hoặc 3.. |