JavaScript 中計數重複項和聚合物件陣列
給定的問題要求計算陣列元素的重複項,然後在一個新陣列中聚合物件。
理解問題
問題陳述是要從陣列中識別重複元素,並建立一個包含這些物件及其計數的單個數組。為了解決這個問題,我們將使用迴圈的幫助來使用蠻力技術。
什麼是物件陣列的聚合?
陣列中的聚合是指將多個物件組合到一個新的輸出陣列中。我們必須檢查物件的聚合是否與提到的陣列的現有元素相容且相等。
問題陳述可以透過以下給出的輸出看到
輸入
const details = [
{ skill: 'Python', user: 'Preet' },
{ skill: 'Javascript', user: 'Shreya' },
{ skill: 'Javascript', user: 'Kajal' },
{ skill: 'Java', user: 'Preet' },
{ skill: 'Javascript', user: 'Preet' },
{ skill: 'HTML and Css', user: 'Happy' }
];
輸出
[
{ "skill": "Python",
"user": [
"Preet",
"Happy"
]
},
{
"skill": "Javascript",
"user": [
"Shreya",
"Kajal",
"Preet"
]
},
{
"skill": "Java",
"user": [
"Preet"
]
},
{
"skill": "HTML and Css",
"user": [
"Happy"
]
}
]
演算法
步驟 1:物件陣列中給出的輸入是重複資料和相同型別的混合,在我們的示例中,name 和 type 物件具有重複的值。因此,要將它們聚合到另一個數組中,並帶有它們的計數值。為了解決這個問題,在其中給出了三個引數的函式宣告,並將它們命名為 data、pCount(屬性計數)和 pGroup(要分組的屬性)。
步驟 2:宣告一個計數變數來計算資料中物件值的出現次數。
步驟 3:現在我們定義多個迴圈來找出具有相同屬性和值的屬性。在我們的示例中,我們有兩個物件,即 name 和 type。因此,我初始化了兩個迴圈來分離屬性並將它們放入不同的陣列中,以及一個迴圈來計算相同型別的物件。
步驟 4:在透過所有條件後,將得到結果的新陣列,我們可以看到包含所有多個數組及其不同資料值的輸出。
示例
// Declaration of data
const data = [
{ name: 'Orange', type: 'fruit' },
{ name: 'Orange', type: 'fruit' },
{ name: 'Pineapple', type: 'fruit' },
{ name: 'Pineapple', type: 'fruit' },
{ name: 'Potato', type: 'vegetable' },
{ name: 'Tomato', type: 'vegetable' },
{ name: 'spinach', type: 'vegetable' },
{ name: 'spinach', type: 'vegetable' }
];
// declaration of function with three arguments
function countCollect(data, pCount, pGroup) {
var count = {};
for (let obj of data) {
let pValue = obj[pCount];
if (pValue in count) {
count[pValue]++;
} else {
count[pValue] = 1;
}
}
let result = {};
for (let obj of data) {
let gValue = obj[pGroup];
if (gValue in result) {
result[gValue].push(obj);
} else {
result[gValue] = [obj];
}
}
for (let pValue in count) {
result[pValue] = {
count: count[pValue]
};
}
return result;
}
let result = countCollect(data, 'name', 'type');
console.log(result);
輸出
{
fruit: [
{ name: 'Orange', type: 'fruit' },
{ name: 'Orange', type: 'fruit' },
{ name: 'Pineapple', type: 'fruit' },
{ name: 'Pineapple', type: 'fruit' }
],
vegetable: [
{ name: 'Potato', type: 'vegetable' },
{ name: 'Tomato', type: 'vegetable' },
{ name: 'spinach', type: 'vegetable' },
{ name: 'spinach', type: 'vegetable' }
],
Orange: { count: 2 },
Pineapple: { count: 2 },
Potato: { count: 1 },
Tomato: { count: 1 },
spinach: { count: 2 }
}
在上面的輸出中,我們可以看到一個包含不同型別資料的陣列。輸出的初始塊顯示水果,輸出的第二個塊顯示蔬菜及其名稱和型別。輸出的最後一個塊顯示水果和蔬菜的計數。
複雜度
執行此演算法所需的時間為 n 平方時間的大 O。因為該演算法使用兩個迴圈來獲取結果。空間複雜度將根據陣列的長度計算,以將所有元素儲存在記憶體中。因此,藉助複雜度,我們可以分析問題的效率。
結論
正如我們所看到的,給定問題的簡單性。要解決任何問題,我們需要遵循某些步驟並進行邏輯思考。時間複雜度和空間複雜度是衡量演算法效率的兩個指標。上述問題採用不同的方法來計算時間空間複雜度。
資料結構
網路
關係型資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP