在 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 方法。

更新於: 2023-08-21

381 次檢視

啟動您的 職業生涯

透過完成課程獲得認證

開始
廣告