在 JavaScript 中使用 JSON 物件陣列

Nithin Krishnan 2023年10月12日
  1. 建立 JSON 物件陣列
  2. 從 JSON 物件陣列訪問物件
  3. 迭代 JSON 物件陣列
  4. 將物件新增到 JSON 物件陣列
  5. 從 JSON 物件陣列中刪除物件
  6. 從 JSON 物件陣列中搜尋元素
在 JavaScript 中使用 JSON 物件陣列

JSON 物件是一個簡單的 JavaScript 物件。我們可以建立一個包含許多類似 JSON 物件的陣列。與 C、C++、Java 等語言不同,在 javascript 中,處理 JSON 物件陣列很容易。它類似於 C 語言中的結構陣列或 Java 中的類物件陣列。在本文中,我們將討論如何通過迭代並在其中查詢元素來建立 JSON 物件陣列。

建立 JSON 物件陣列

我們可以通過將 JSON 陣列分配給變數或使用 .push() 運算子在物件陣列中動態新增值來建立 JSON 物件陣列,或者使用迴圈結構在陣列的索引處新增物件,例如 for 迴圈或 while 迴圈。參考以下程式碼更好理解。

var months = [{'id': 1, 'name': 'January'}, {'id': 2, 'name': 'February'}];
console.log(JSON.stringify(months));
var monthNames = ['January', 'February'];
var month = {};
var monthsArray = [];
for (let i = 0; i < 2; i++) {
  month.id = (i + 1);
  month.name = monthNames[i];
  monthsArray.push({...month});
}
console.log(JSON.stringify(monthsArray));

輸出:

[{"id":1,"name":"January"},{"id":2,"name":"February"}]
[{"id":1,"name":"January"},{"id":2,"name":"February"}]

在上面的程式碼中,months 變數儲存顯式分配的 JSON 物件陣列,而 monthsArray 是通過在 for 迴圈內分配值建立的 JSON 物件陣列。我們使用 .push() 陣列函式將生成的 javascript 物件新增到 monthsArray 的末尾。請注意,當使用 JavaScript console.log() 語句記錄時,這兩個陣列顯示相同的結構。JSON.stringify() 函式將 JSON 陣列轉換為字串格式,使其成為人類可讀的格式。

從 JSON 物件陣列訪問物件

我們已經建立了一個 JSON 物件陣列。讓我們看看如何訪問這個陣列的元素。該方法與我們對簡單字串陣列或數字陣列所做的相同。我們可以使用陣列索引(從 0 開始)訪問陣列物件,並在該索引處操作物件值。參考以下程式碼。

var months = [{'id': 1, 'name': 'January'}, {'id': 2, 'name': 'February'}];
console.log(months[0].id);
console.log(months[0].name);
months[0].id = 3;
months[0].name = 'March';
console.log(months[0].id);
console.log(months[0].name);

輸出:

1
January
3
March

在程式碼中,我們通過使用 array Index 訪問 months 陣列的第一個索引來更改物件引數的值。類似地,我們可以使用其索引更改陣列中任何其他物件的值。

迭代 JSON 物件陣列

我們可以像處理字串陣列或數字陣列一樣迭代物件陣列。我們可以使用 for 迴圈while 迴圈 來達到我們的目的。我們可以使用陣列索引訪問元素。我們將陣列從第 0 個索引迭代到陣列長度。.length 屬性也返回物件陣列的長度。請參考以下程式碼,其中顯示了迭代陣列並列印其中每個物件的值。

var months = [{'id': 1, 'name': 'January'}, {'id': 2, 'name': 'February'}];
for (let i = 0; i < months.length; i++) {
  console.log(`${i} id:${months[i].id}, name:${months[i].name}`)
}

輸出:

0 id:1, name:January
1 id:2, name:February

將物件新增到 JSON 物件陣列

我們建立了一個物件陣列並迭代它們。現在讓我們看看如何向 JSON 陣列新增元素。我們可以使用 .push() 函式將一個 JSON 物件新增到陣列的末尾。.unshift() 函式在 JSON 陣列的開頭新增一個元素。.splice() 在陣列中的指定索引處插入一個物件。請參考以下描述這些函式用法的程式碼。

var months = [{'id': 1, 'name': 'January'}, {'id': 2, 'name': 'February'}];
months.push({'id': 4, 'name': 'April'});
console.log(JSON.stringify(months));
months.unshift({'id': 12, 'name': 'December'})
console.log(JSON.stringify(months));
months.splice(3, 0, {'id': 3, 'name': 'March'});
console.log(JSON.stringify(months));

輸出:

[{"id":1,"name":"January"},{"id":2,"name":"February"},{"id":4,"name":"April"}]
[{"id":12,"name":"December"},{"id":1,"name":"January"},{"id":2,"name":"February"},{"id":4,"name":"April"}]
[{"id":12,"name":"December"},{"id":1,"name":"January"},{"id":2,"name":"February"},{"id":3,"name":"March"},{"id":4,"name":"April"}]

請注意,我們可以使用 .splice() 函式將陣列中的物件替換為作為引數傳遞的新值。.splice() 方法的第一個引數是我們執行操作的索引。作為第二個引數,我們提到了我們希望替換的元素數量。最後一個引數是我們插入到陣列中的值。

從 JSON 物件陣列中刪除物件

我們可以以類似於簡單 JavaScript 陣列的方式從物件陣列中刪除元素。我們可以使用 javascript 的 .pop() 方法從 JSON 物件陣列的末尾刪除元素。.shift() 從 JSON 物件陣列的開頭刪除一個物件。.splice() 函式刪除 JSON 陣列指定索引處的元素。參考以下程式碼。

var months = [
  {'id': 12, 'name': 'December'}, {'id': 1, 'name': 'January'},
  {'id': 2, 'name': 'February'}, {'id': 3, 'name': 'March'},
  {'id': 4, 'name': 'April'}
];
months.shift();
console.log(JSON.stringify(months));
months.pop();
console.log(JSON.stringify(months));
months.splice(1, 1);
console.log(JSON.stringify(months));

輸出:

[{"id":1,"name":"January"},{"id":2,"name":"February"},{"id":3,"name":"March"},{"id":4,"name":"April"}]
[{"id":1,"name":"January"},{"id":2,"name":"February"},{"id":3,"name":"March"}]
[{"id":1,"name":"January"},{"id":3,"name":"March"}]

從 JSON 物件陣列中搜尋元素

我們可以使用 .indexOf()includes() 來檢查一個元素是否存在於一個簡單的字串陣列中。但是這些方法不適用於物件陣列。我們可以使用某些類似的函式,如 .filter().find()findIndex() 來檢查陣列中是否存在元素。我們可以手動迭代陣列並使用迴圈結構(如 forwhile 迴圈等)檢查元素是否存在,但這可能是最後一個要考慮的選項,因為它會導致大量程式碼。javascript 內建函式如 .filter().find()findIndex() 可用於在 JSON 物件陣列中搜尋物件。.filter() 函式返回一個包含滿足特定條件的物件的陣列,.find() 返回滿足作為行內函數傳遞給它的條件的物件,.findIndex() 將返回如果可以在陣列中找到物件的索引,則返回 -1。因此,通過了解函式的返回型別,我們可以在 JSON 物件陣列中設計搜尋功能。參考以下程式碼可以更好地理解 .filter().find()findIndex() 的用法。

var months = [
  {'id': 12, 'name': 'December'}, {'id': 1, 'name': 'January'},
  {'id': 2, 'name': 'February'}, {'id': 3, 'name': 'March'},
  {'id': 4, 'name': 'April'}
];
(months.filter(i => i.name === 'April').length) ?
    console.log('April month found') :
    console.log('Not found');
(months.find(i => i.name === 'January') != {}) ?
    console.log('January month found') :
    console.log('Not found');
(months.findIndex(i => i.name === 'April') > -1) ?
    console.log('April month found') :
    console.log('Not found');

輸出:

April month found
January month found
April month found

相關文章 - JavaScript JSON