在 JavaScript 中將物件陣列轉換為陣列物件
問題陳述要求在 JavaScript 中將物件陣列完全轉換為陣列物件,其中物件陣列由使用者作為輸入源給出,並且給定的輸入可以成功地完全轉換為最終的陣列物件。
什麼是 JavaScript 中的陣列?
如果您熟悉其他程式語言,例如 C、C++ 或 Java,您一定聽說過“陣列”這個術語。
在程式設計中,陣列是在一個屋簷下收集相似資料元素。
現在,一個重要的問題出現了:如果陣列在所有語言中通常都是相同的,那麼 JavaScript 如何使陣列更具唯一性和可用性?
讓我們瞭解 JavaScript 中陣列的整體工作原理。
陣列是一個儲存多個元素的物件。由於陣列也是一個物件,因此它具有一些屬性和方法,使在 JavaScript 中更輕鬆地使用陣列。
以下是 JavaScript 中定義陣列的語法:−
const arrayExample = [ 2 , 3 , 5 ,6 ]; console.log(arrayExample);
輸出
[2, 3, 5, 6]
什麼是 JavaScript 中的物件?
JavaScript 中的物件是鍵值對的集合,其中鍵值對稱為物件的屬性。物件的屬性也可以是函式或方法。使用者也可以輕鬆定義自己的自定義物件。
以下是 JavaScript 中定義物件的語法:−
const student = { name : "Ashish", course : "Javascript", from : "tutorialspoint", display : function(){ console.log(student.name + " " + "is learning" + " " + student.course + " from " + student.from) } } student.display()
輸出
Ashish is learning Javascript from tutorialspoint
什麼是 Javascript 中的物件陣列?
陣列是有序的資料集合,而物件是無序的資料集合,例如物件表示汽車的屬性,物件陣列表示所有型別汽車的特定屬性。因此,物件陣列是在其內部包含多個物件的排序集合。
物件陣列的語法如下所示
let studentArray = [ { "name": "priya", "course": "JS", "from": "tutorialspoint", }, { "name": "ashish", "course": "React", "from": "tutorialspoint", }, { ... }, ... ]
什麼是 Javascript 中的陣列物件?
在 JavaScript 中,物件設定現實世界實體的屬性,現實世界實體有時也會為某個鍵值對累積元素陣列,從而在 javascript 中形成陣列物件的概念,它使物件變得複雜和僵化,幷包含大量資料。
陣列物件的語法如下所示
let studentObject = { "name": "priya", "course": ["JS", "React","Python" ,"CSS"], "from": "tutorialspoint", } console.log(studentObject);
演算法
步驟 1 − 宣告一個名為 objectToArrayConversion 的函式,該函式以物件陣列作為引數。
步驟 2 − 我們需要從物件陣列轉換為陣列物件,為此需要一個名為 resultObject 的結果物件,該物件被宣告為空物件。
步驟 3 − 使用 for 迴圈遍歷物件陣列,直到其 length 屬性,以便可以使用 Object.keys 方法提取物件陣列的鍵。
步驟 4 − 一旦提取出所有鍵,我們就可以遍歷物件陣列中存在的鍵的長度,以便如果 resultObject 使用 JavaScript 中的 hasOwnProperty 方法擁有該特定鍵,則將 resultObject 中存在的對應鍵的值對推入其中。
步驟 5 − 如果 resultObject 中不存在該鍵,則將該特定鍵值對分配給 resultObject。
步驟 6 − 一旦所有迴圈都結束,resultObject 將返回所有鍵值對,並將多個值分配給物件陣列的特定鍵,形成陣列的形狀。
示例
function objectToArrayConversion(arrayOfObject) { const resultObject = { }; for(let i =0 ; i<arrayOfObject.length ; i++ ) { const keys = Object.keys(arrayOfObject[i]) for(let j = 0 ; j<keys.length ; j++) { if(resultObject.hasOwnProperty(keys[j])) { resultObject[keys[j]].push(arrayOfObject[i][keys[j]]); } else { resultObject[keys[j]] = [arrayOfObject[i][keys[j]]]; } } } return resultObject; } let studentArray = [ { "name": "priya", "course": "JS", "from": "tutorialspoint", }, { "name": "ashish", "course": "React", "from": "tutorialspoint", } ] console.log(objectToArrayConversion(studentArray))
關於問題陳述,使用上述演算法的特定程式碼在控制檯中如下所示
輸出
{ name: [ 'priya', 'ashish' ], course: [ 'JS', 'React' ], from: [ 'tutorialspoint', 'tutorialspoint' ] }
時間和空間複雜度
以下問題陳述使用 JavaScript 方法(如 Object.keys 和 hasOwnProperty 方法)來解決,這些方法在最壞情況下以 O(n) 時間複雜度遍歷元素陣列。問題陳述的空間複雜度為 O(1)。
結論
這就是我們如何在邏輯上以及在編碼上下文中解決上述問題陳述,並充分利用 JavaScript 方法。