/**
* Merges multiple datasets for monitoring purposes with fallback logic.
*
* @param {...Array<Object>} datasets An array of datasets to merge. Each dataset is an array of objects.
* @param {string} primaryKey The key to use as the primary key for merging.
* @returns {Array<Object>} A merged dataset. Returns an empty array if no datasets are provided.
*/
function mergeDatasets(datasets, primaryKey) {
if (!datasets || datasets.length === 0) {
return []; // Return empty array if no datasets are provided
}
const mergedDataset = [];
for (const dataset of datasets) {
if (!Array.isArray(dataset)) {
console.warn("Skipping invalid dataset: Not an array.");
continue; // Skip invalid datasets
}
for (const item of dataset) {
if (typeof item !== 'object' || item === null) {
console.warn("Skipping invalid item: Not an object.");
continue; // Skip invalid items
}
if (!item.hasOwnProperty(primaryKey)) {
console.warn(`Skipping item due to missing primary key: ${primaryKey}`);
continue; // Skip items without the primary key
}
const key = item[primaryKey];
let found = false;
// Check if the item already exists in the merged dataset
for (const existingItem of mergedDataset) {
if (existingItem.hasOwnProperty(primaryKey) && existingItem[primaryKey] === key) {
// Merge the items. Prioritize values from the later datasets.
Object.assign(existingItem, item);
found = true;
break;
}
}
if (!found) {
mergedDataset.push(item);
}
}
}
return mergedDataset;
}
Add your comment