var arParent = [
["col1a", "col1b", "col1c", "<b>&</b>"],
["col2a", "col2b", "col2c", "<a href='http://google.com'>googles</a>"]
]
function transformData(arr) {
// transform columns into rows
var rows = [];
for (var i = 0, iLen = arr.length; i < iLen; i++) {
var cols = arr[i];
for (var j = 0, jLen = cols.length; j < jLen; j++) {
var row;
if (i === 0) {
row = {
columns: []
};
rows.push(row);
} else {
row = rows[j];
}
var col = cols[j];
row.columns.push(col);
}
}
return rows;
}
// from http://stackoverflow.com/questions/1219860/html-encoding-in-javascript-jquery
function htmlEscape(str) {
return String(str)
.replace(/&/g, '&')
.replace(/"/g, '"')
.replace(/'/g, ''')
.replace(/</g, '<')
.replace(/>/g, '>');
}
function renderTableData(rows) {
var html = [];
for (var r = 0, rLen = rows.length; r < rLen; r++) {
var row = rows[r];
html.push("<tr>");
for (var c = 0, cLen = row.columns.length; c < cLen; c++) {
var col = row.columns[c];
html.push("<td>");
html.push(htmlEscape(col));
html.push("</td>");
}
html.push("</tr>");
}
var tbody = document.getElementById('tabledata');
tbody.innerHTML = html.join('');
}
var rows = transformData(arParent);
console.log(JSON.stringify(rows));
renderTableData(rows);
td {
padding: 2px 4px;
font-family: "Segoe UI", Arial, sans-serif;
border: 1px solid #ccc;
}
<table>
<tbody id='tabledata'>
</tbody>
</table>