Object/array syntax highlight
Note: New lines are written as `\n` in the example. These are representing: \n
View code
const testObj = {
someKey: "Some value",
secondKey: "Second value",
doSomeNesting: {
coolString: "I think so!",
coolBoolean: false,
coolNumber: 22,
firstNest: {
gettingThere: "Great!",
secondNest: {
hope: "Works indeed!",
someFn: () => {
return "Something cool"
},
thirdNest: [
{ name: "lucky", age: 20},
{ name: "jack", age: 25},
],
slick: true
}
}
},
callFunction: {
someFn: () => {
return "Returning something.."
}
}
}
const testArr = [
"item1",
"item2",
{
someObj: "abc",
numeric: 123,
arrInObj: [
"testtest",
{test: 123123}
]
},
]
const preElm = document.querySelector('.pre-elm')!
let spaces = ' '
let level = 0
const generateLines = (data,level) => {
if(level === 0) {
preElm.innerHTML = Array.isArray(data) ? '[\n' : '{\n'
}
let valIsArray = false
level = level + 1
for(const [key,val] of Object.entries(data)) {
if(typeof val === 'object') {
valIsArray = Array.isArray(val)
preElm.innerHTML += spaces.repeat(level) + '<span class="obj-key">' + key + '</span>:' + valIsArray ? '[\n' : '{\n'
generateLines(val,level)
if(level >= 1) {
preElm.innerHTML += spaces.repeat(level) + valIsArray ? '],\n' : '},\n'
}
} else {
let colorType = "string-val"
if(typeof val === 'number') {
colorType = 'number-val'
} else if(typeof val === 'boolean') {
colorType = 'boolean-val'
} else if(typeof val === 'function') {
colorType = 'function-val'
}
preElm.innerHTML += spaces.repeat(level) + '<span class="string-key">' + key + '</span>:' + typeof val === 'string' ? '<span class="' + colorType + '">' + val + '</span>' : '<span class="' + colorType + '">' + val + '</span> },\n'
}
}
if(level === 1) {
preElm.innerHTML += Array.isArray(data) ? ']\n' : '}\n'
}
}
//Syntax highlight
generateLines(testObj,level)