JSFiddle - React, Tailwind, and code Playground
by pierian_design
JavaScript
let d = [
{
"0": 0,
"1": "\nColumn1\tColumn2\tColumn3\t\na\t"
},
{
"0": -1,
"1": "2\t"
},
{
"0": 1,
"1": "0\t3\t\na\t1\t3\t\na\t1\t3\t\na\t1\t"
},
{
"0": 0,
"1": "3\t\nb\t2\t2\t"
},
{
"0": 0,
"1": "\n\t"
}
];
function step( next ) {
let op = next['0'];
let s = next['1'];
let len = s.split('\t').length - 1;
let rowCount = s.split('\n').length - 1;
if (-1 == op) {
oResult = {
STATUS: 'INSERT',
STRING: s,
POSITION_1: [last_a, last_a + len - 1], // [last_a, last_a + len]
POSITION_2: null,
ROW_1: row1 += rowCount,
ROW_2: null
}
last_a += len;
return oResult;
}
if (0 == op) {
oResult = {
STATUS: 'EQUAL',
STRING: s,
POSITION_1: [last_a, last_a + len - 1], // [last_a, last_a + len]
POSITION_2: [last_b, last_b + len - 1], // [last_b, last_b + len]
ROW_1: row1 += rowCount,
ROW_2: row2 += rowCount
}
last_a += len;
last_b += len;
return oResult;
}
if (1 == op) {
oResult = {
STATUS: 'DELETE',
STRING: s,
POSITION_1: null, // [last_a, last_a + len]
POSITION_2: [last_b, last_b + len - 1], // [last_b, last_b + len]
ROW_1: null,
ROW_2: row2 += rowCount
}
last_b += len;
return oResult;
}
}
let o = [];
let last_a = 0;
let last_b = 0;
let row1 = -1;
let row2 = -1;
let oResult = {};
for (let chunk in d) {
let next = step(d[chunk]);
o.push(next);
}
o.pop();
console.log(o)