Skip to content

Instantly share code, notes, and snippets.

@ianaya89
Created June 9, 2023 13:16
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ianaya89/f8be30b2f8a99d3771569f5d25426a40 to your computer and use it in GitHub Desktop.
Save ianaya89/f8be30b2f8a99d3771569f5d25426a40 to your computer and use it in GitHub Desktop.
Pulumi Interview
const oldData = {
"region": "us-west-1",
"sku": {
"tier": "standard",
"name": "s1a",
},
"replication": "local",
"oldKey": "oldVal"
}
const newData = {
"region": "us-west-1",
"sku": {
"tier": "standard",
"name": "s2a",
},
"replication": "global",
"newKey": "newVal"
}
function getPrefix (prefix, key) {
if (prefix === '') {
return key
}
return `${prefix}.${key}`
}
function diff(oldData, newData, prefix = '') {
const diffs = []
for (key in newData) {
if (oldData.hasOwnProperty(key)) {
if(typeof oldData[key] === 'object' && typeof newData[key] === 'object') {
diffs.push(...diff(oldData[key], newData[key], getPrefix(prefix, key) ))
}
else if (oldData[key] !== newData[key]) {
diffs.push(`${getPrefix(prefix, key)}: ${oldData[key]} -> ${newData[key]}`)
}
} else {
diffs.push(`${getPrefix(prefix, key)}: +${newData[key]}`)
}
}
for (key in oldData) {
if (!newData.hasOwnProperty(key)) {
diffs.push(`${getPrefix(prefix, key)}: -${oldData[key]}`)
}
}
return diffs
}
console.log(diff(oldData, newData))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment