在 JavaScript 中從巢狀 JSON 物件獲取鍵的值


在給定的問題陳述中,我們被要求在 JavaScript 功能的幫助下從巢狀 JSON 物件中獲取鍵的值。在 JavaScript 中,我們可以使用點表示法或括號表示法來解決和訪問 json 資料物件。

在開始為給定問題編寫程式碼之前,讓我們先了解什麼是 JSON 物件

什麼是 JSON 和巢狀 JSON 物件?

JSON 的全稱是 JavaScript 物件表示法。它是一種標準的基於文字的格式,用於顯示結構化資料。它主要用於在 Web 應用程式中傳輸資料,這意味著我們可以將資料傳送到伺服器,並且伺服器可以以 JSON 格式傳送回資料。

巢狀 JSON 物件是指 JSON 檔案中存在的物件可以巢狀在其他物件內部。並且相同的欄位名稱也可以在巢狀物件中。但每個巢狀物件都應該有唯一的路徑。

{
    "name": "Super Hero",
    "homeTown": "Metro City",
    "birthYear": 2000,
    "active": true,
    "members": [
      {
        "name": "Molecule Man",
        "age": 29,
        "powers": ["Radiation resistance", "Turning tiny", "Radiation blast"]
      },
      {
        "name": "Madame Uppercut",
        "age": 39,
        "powers": [ "Million tonne punch", "Damage resistance"]
      },
}

上述問題的邏輯

在 JavaScript 中使用點表示法和括號表示法訪問巢狀 JSON 物件中的鍵值的最簡單方法。

因此,乍一看,我們將使用巢狀 JSON 資料結構來訪問其鍵。有兩種方法可以訪問物件鍵:第一種是點表示法,第二種是括號表示法。我們還可以建立一個函式來訪問鍵。

以下是使用和不使用函式訪問巢狀 JSON 物件鍵的演算法和程式碼

演算法 - 不使用函式

步驟 1:宣告一個 Json 物件並將其命名為 data。此資料包含 name、age、address 等物件。並且 address 具有 street、city 和 state 等巢狀屬性。

步驟 2:現在我們將從上面定義的資料中訪問 name 和 street。因此,這裡我們將使用點表示法來訪問它並在控制檯上列印。

步驟 3:在使用點表示法訪問 name 和 street 地址後,現在我們將使用括號表示法訪問 age 和 state 屬性。並在控制檯上顯示輸出。

示例

// Example JSON object
const data = {
  "name": "John",
  "age": 30,
  "address": {
    "street": "123 Main St",
    "city": "Anytown",
    "state": "CA"
  }
};
// Accessing nested properties with dot notation
const name = data.name;
const street = data.address.street;
console.log("My name is: " + name + ", Street address is: " + street);
// Accessing nested properties with bracket notation
const age = data["age"];
const state = data["address"]["state"];
console.log("My age is: " + age + ", State is: " + state);

輸出

My name is: John, Street address is: 123 Main St
My age is: 30, State is: CA

演算法 - 使用函式

步驟 1:宣告一個名為 data 的 Json 物件。此資料包含 name、age、address 等屬性。並且 address 具有 street、city 和 state 等三個巢狀物件。

步驟 2:建立巢狀 JSON 物件後,我們將定義一個名為 getNestedKeys 的函式來訪問 JSON 資料的巢狀鍵。在此函式內部,我們已啟動一個 if 條件,它檢查鍵是否直接在 json 資料中可用,如果條件為真,則返回其值。

步驟 3:如果資料不是直接存在的,並且資料是巢狀的,那麼我們將定義一個名為 keys 的變數,它使用點表示巢狀資料。

步驟 4:定義另一個名為 value 的變數,它儲存名為 obj 的 json 資料。並初始化一個 for 迴圈,它將執行直到 keys 的長度。並找出巢狀的鍵值對。如果找到資料,則返回它,否則返回未定義。

步驟 5:這就是上述函式的工作原理。現在呼叫建立的函式並列印巢狀鍵的值。

示例

// Example JSON object
  const data = {
    "name": "John",
    "age": 30,
    "address": {
      "street": "421 Main Street",
      "city": "Anytown",
      "state": "CA"
    }
  };
// function to access the nested properties
function getNestedKeys(obj, key) {
    if (key in obj) { 
      return obj[key];
    }
    const keys = key.split("."); 
    let value = obj; 
    for (let i = 0; i < keys.length; i++) {
      value = value[keys[i]];
      if (value === undefined) {
        break;
      }
    }
   
    return value;
  } 
  // Using the getNestedKeys method to get a value for a key
  const name = getNestedKeys(data, "name");
  const age = getNestedKeys(data, "age");
  const street = getNestedKeys(data, "address.street");
  const state = getNestedKeys(data, "address.state");
  console.log("Name: ", name);
  console.log("Age: ", age);
  console.log("Street: ",street);
  console.log("State: ",state);

輸出

Name:  John
Age:   30
Street:  421 Main Street
State:  CA

複雜度

上述演算法(使用點表示法和括號表示法)的時間複雜度平均為 O(1)。這是因為我們僅使用點表示法或括號表示法之一來訪問物件屬性,這涉及在雜湊表中直接查詢物件。因此,雜湊表具有恆定的時間複雜度。而函式演算法使用 O(n) 時間來執行函式,其中 n 是 JSON 物件中屬性的數量。因為函式需要遍歷每個物件以查詢鍵。此方法的空間複雜度也為 O(n)。因為它是一個遞迴呼叫,它向堆疊添加了一個新的呼叫幀。

結論

在此程式碼中,我們實現了訪問鍵值的不同方法,並使用函式訪問鍵。在上述演算法中,我們正在訪問 JavaScript 物件中的巢狀屬性,這是一種快速有效的方法,具有恆定的時間複雜度。因為點和括號表示法。這些表示法被廣泛用於訪問 JSON 鍵。

更新於: 2023-08-23

16K+ 瀏覽量

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告