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)