Javascript chuyển ký hiệu dấu chấm thành dấu ngoặc

Giả sử sau đây là chuỗi ký hiệu dấu chấm của chúng ta -

const keys = "details1.details2.details3.details4.details5"

Và sau đây là mảng của chúng tôi -

const firsName = "David";

Để biến thành một đối tượng lồng nhau, hãy sử dụng khái niệm split[‘. ’] cùng với bản đồ[]

Thí dụ

Sau đây là mã -

const keys = "details1.details2.details3.details4.details5"
const firsName = "David";
var tempObject = {};
var container = tempObject;
keys.split['.'].map[[k, i, values] => {
   container = [container[k] = [i == values.length - 1 ? firsName : {}]]
}];
console.log[JSON.stringify[tempObject, null, ' ']];

Để chạy chương trình trên, bạn cần sử dụng lệnh sau -

node fileName.js.

Ở đây, tên tệp của tôi là demo227. js

đầu ra

Đầu ra như sau -

PS C:\Users\Amit\JavaScript-code> node demo227.js
{
 "details1": {
  "details2": {
   "details3": {
    "details4": {
     "details5": "David"
    }
   }
  }
 }
}

Có hai cách để truy cập các thuộc tính [cặp khóa-giá trị] của Đối tượng JS. Ký hiệu dấu chấm [. ] hoặc Ký hiệu ngoặc vuông [ [ ] ].  

Ví dụ. sự vật. tài sản = đối tượng [“tài sản”].  

Vậy đâu là sự khác biệt giữa hai lựa chọn này? . Tuy nhiên, đó là cách JavaScript mở hộp hoặc truy cập các câu lệnh. Trong trường hợp ký hiệu dấu chấm, JS đi đến dấu chấm đầu tiên và sau đó bắt đầu mở hộp các thuộc tính. Hãy xem ví dụ sau.  

var person = { 
           property1: "firstName",
           property2: "lastName"
          }

Bây giờ chúng tôi muốn truy cập thuộc tính đầu tiên của người này bằng ký hiệu dấu chấm

Điều này sẽ cung cấp cho chúng tôi tên đầu tiên

Bây giờ, JS nhận ra dấu chấm và mong đợi tên rõ ràng của thuộc tính được gọi là firstName trong trường hợp này

Chúng tôi cũng nhận được kết quả tương tự trong trường hợp ký hiệu ngoặc

person['property1'] // --> firstName

Chúng tôi cũng nhận được kết quả tương tự trong trường hợp ký hiệu ngoặc

Bây giờ, chúng tôi muốn sử dụng một biến để trả về hoặc đặt thuộc tính. Hãy để chúng tôi tạo một biến x

Bây giờ, như chúng ta đã biết, chúng ta có một thuộc tính trong đối tượng person với khóa thuộc tính 2. Nếu bây giờ chúng ta muốn lấy giá trị của thuộc tính này trong ký hiệu dấu chấm, chúng ta chỉ cần gõ

Điều này mở ra thuộc tính thứ hai của người có khóa là "property2" và cung cấp cho chúng tôi giá trị lastName

Bây giờ, hãy nhớ biến x, nó sẽ được truy cập thuộc tính này theo người. x phải không?

Ký hiệu dấu chấm trong trường hợp này là cho chúng tôi không xác định. Hãy thử ký hiệu ngoặc

Lý do là trong một đối tượng JS, tất cả các khóa thuộc tính đều là chuỗi. Vì vậy, khi bạn sử dụng ký hiệu dấu chấm, JS mong đợi một khóa có giá trị là một chuỗi hoặc bất kỳ thứ gì sau dấu chấm

Vì vậy, người. x tìm thuộc tính của người có khóa là "x". Nhưng đối tượng của chúng ta không có thuộc tính gọi là "x"

Mặt khác, ký hiệu ngoặc có thể xử lý person[x], do cách JS truy cập các câu lệnh. Nó chạy theo và bắt đầu đánh giá câu lệnh hoàn chỉnh đầu tiên mà nó gặp. Sau đó, nó đánh giá câu lệnh và kiểm tra thêm cho đến khi tìm thấy câu lệnh hoàn chỉnh tiếp theo, sau đó nó sẽ đánh giá

Vậy tại sao các tùy chọn này tồn tại? . tuy nhiên, nó liên quan đến cách JS “mở hộp” các câu lệnh. Nếu bạn sử dụng ký hiệu dấu chấm, javascript sẽ đi đến dấu chấm đầu tiên này và sau đó bắt đầu mở hộp thuộc tính sau dấu chấm. Chẳng hạn, giả sử chúng ta có đối tượng sau

var cat = { 
property1: "meow",
property2: "hiss"
}

Âm thanh giống như hầu hết các con mèo. Bây giờ, giả sử chúng ta muốn truy cập thuộc tính đầu tiên của con mèo này bằng ký hiệu dấu chấm như thế này

________số 8

javascript nhìn thấy dấu chấm và nghĩ “ok, sau dấu chấm này là tên rõ ràng của một thuộc tính có tên là “property1” trong trường hợp này. Hãy mở hộp thuộc tính này và lấy ra giá trị thuộc về khóa “property1”. Chuyện gì xảy ra thế này

cat.property1
"meow"

Chúng tôi nhận được một kết quả tương tự bằng cách sử dụng ký hiệu ngoặc

const firsName = "David";
0

lưu ý cách property1 và [“property1"] được đối xử tương tự. Bây giờ, giả sử chúng ta muốn sử dụng một biến để trả về hoặc đặt thuộc tính. Điều này rất hữu ích trong các vòng lặp và các ứng dụng khác

Hãy tạo một biến có tên là “x”

const firsName = "David";
1

Bây giờ, hãy nhớ rằng chúng ta có một thuộc tính trong đối tượng mèo của mình với khóa là “property2". Nếu chúng ta muốn lấy giá trị của thuộc tính này trong ký hiệu dấu chấm, chúng ta chỉ cần gõ

const firsName = "David";
2

Thao tác này mở ra thuộc tính thứ hai của cat với khóa là “property2" và cho chúng ta giá trị như vậy

const firsName = "David";
3

Bây giờ, vì chúng ta đã tạo biến “x” bằng với “property2", có vẻ như chúng ta có thể mở hộp thuộc tính này bằng cách nói cat. x ĐÚNG…. ?

const firsName = "David";
4

Nhưng tại sao? . Hãy thử ký hiệu ngoặc

const firsName = "David";
50

Scott vĩ đại— nó hoạt động. Nhưng tại sao tôi không gõ dấu ngoặc kép xung quanh x như tôi đã làm với thuộc tính 1?

const firsName = "David";
51

Bởi vì trong một đối tượng JS, tất cả các khóa thuộc tính đều là chuỗi. Khi bạn sử dụng ký hiệu dấu chấm, JS đang nghĩ rằng bạn đang tìm kiếm một khóa có giá trị là một chuỗi bất kỳ thứ gì sau dấu chấm. Vì thế

const firsName = "David";
52

tìm thuộc tính của cat với khóa là “x”. Nhưng mà

const firsName = "David";
53

đối tượng mèo của chúng ta không có thuộc tính gọi là “x”. Bây giờ, ký hiệu ngoặc có thể xử lý cat[x] bởi vì, như đã nói trước đây, cách JS diễn giải hoặc “mở hộp” các câu lệnh. Nó chạy theo và bắt đầu đánh giá câu lệnh hoàn chỉnh đầu tiên mà nó gặp. Sau đó, nó đánh giá câu lệnh này và chạy cho đến khi tìm thấy câu lệnh hoàn chỉnh tiếp theo, sau đó nó sẽ đánh giá. Hãy minh họa bằng cách giới thiệu một nếp nhăn khác trong mã của chúng tôi bằng một đối tượng mới

const firsName = "David";
54

Hãy cung cấp cho mèo một thuộc tính mới với giá trị sau

const firsName = "David";
55

Điều gì sẽ xảy ra nếu chúng ta muốn truy cập giá trị “cái gì đó không phải của mèo” bằng cách sử dụng đối tượng dog?

const firsName = "David";
56

Chó không phải là một thuộc tính của mèo, vì vậy điều này sẽ không hoạt động. Với ký hiệu dấu chấm, chúng ta chỉ có thể di chuyển xuống cây thuộc tính của đối tượng bằng các khóa thuộc tính rõ ràng của nó

Nhưng điều này có thể được thực hiện với ký hiệu ngoặc

const firsName = "David";
57

Javascript đã nhìn thấy dấu ngoặc mở, nhưng vẫn tiếp tục di chuyển cho đến khi gặp dấu ngoặc đóng đầu tiên. Sau đó, nó đánh giá tuyên bố này. Trong trường hợp của chúng tôi ở trên, sau lần đánh giá đầu tiên, chúng tôi nhận được

const firsName = "David";
58

Tiếp theo, JavaScript đánh giá câu lệnh này, tiết lộ giá trị được lưu trữ bên trong khóa “yêu thương” của thuộc tính con mèo này

const firsName = "David";
59

Có một số thứ khác mà JS làm, mà chúng ta sẽ minh họa bằng cách tạo thêm một vài biến

var cat = { 
property1: "meow",
property2: "hiss"
}
0

Bây giờ, hãy thử truy cập cùng một giá trị của cat với các biến này

var cat = { 
property1: "meow",
property2: "hiss"
}
1

à há. Điều này rất hữu ích vì sau đó chúng ta có thể sử dụng các biến, cần thiết cho các vòng lặp và tất cả những thứ khác

Như ai đó đã nêu trong StackOverflow

Nói chung, biểu thức trong dấu ngoặc vuông được đánh giá và phương thức toString[] của nó được gọi là. Đó là giá trị được sử dụng làm tên thuộc tính

Chủ Đề