/**
* Diffs two datasets of strings and suggests quick fixes.
* @param {string[]} dataset1 The first dataset.
* @param {string[]} dataset2 The second dataset.
* @returns {object} An object containing diff results and suggested fixes.
*/
function diffStringDatasets(dataset1, dataset2) {
const diffResults = {
added: [],
removed: [],
modified: [],
};
// Find added elements
for (const item of dataset2) {
if (!dataset1.includes(item)) {
diffResults.added.push({ value: item, index: -1 }); // Index is -1 for added elements
}
}
// Find removed elements
for (const item of dataset1) {
if (!dataset2.includes(item)) {
diffResults.removed.push({ value: item, index: dataset1.indexOf(item) }); // Store original index
}
}
// Find modified elements
for (let i = 0; i < Math.min(dataset1.length, dataset2.length); i++) {
if (dataset1[i] !== dataset2[i]) {
diffResults.modified.push({
index: i,
oldValue: dataset1[i],
newValue: dataset2[i],
});
}
}
return diffResults;
}
/**
* Suggests quick fixes based on the diff results.
* @param {object} diff The diff results object.
* @returns {string[]} An array of suggested fixes.
*/
function suggestQuickFixes(diff) {
const fixes = [];
// Suggest adding missing elements
if (diff.added.length > 0) {
fixes.push(`Add missing elements: ${diff.added.map(x => x.value).join(', ')}`);
}
// Suggest removing unused elements
if (diff.removed.length > 0) {
fixes.push(`Remove unused elements: ${diff.removed.map(x => x.value).join(', ')}`);
}
// Suggest modifying differing elements (inline fixes)
if (diff.modified.length > 0) {
diff.modified.forEach(item => {
fixes.push(`Modify element at index ${item.index}: Change from '${item.oldValue}' to '${item.newValue}'`);
});
}
return fixes;
}
// Example Usage:
// const dataset1 = ["apple", "banana", "cherry"];
// const dataset2 = ["apple", "orange", "cherry", "grape"];
// const diff = diffStringDatasets(dataset1, dataset2);
// const fixes = suggestQuickFixes(diff);
// console.log("Diff Results:", diff);
// console.log("Suggested Fixes:", fixes);
Add your comment