JSFiddle - React, Tailwind, and code Playground

by dpnminh

JavaScript

var arrT = [1,2,2,4,4,4,4,4,4,4,5,5,5,8,8,8,8,8,8,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,9,9,9,9,9,9,9,9,9,9,9,9,10,10,10,10,11,12,3,13,
14, 14, 14,14,14,14,14,15,15,15,15,15,15, 19,19,19,19,19,19,20];

function uniqueIndex(start, end, arr, map){
			if (start === end){
				return;
			}

			var startValue = arr[start], endValue = arr[end];

			initUniqueStartObj(startValue, map, start, arr[start - 1]);
			initUniqueEndObj(endValue, map, end, arr[end - 1], arr.length);

			if (endValue === startValue){
				if (end === arr.length - 1 || arr[end + 1] !== startValue){
					setMapObj(startValue, map, end, 'to');

					if (end + 1 < arr.length){
						setMapObj(arr[end + 1], map, end + 1, 'from');
					}

					return;
				}
			}
			else {
				if ((start === end - 1) && arr[start - 1] === startValue) {
					setMapObj(startValue, map, start, 'to');
				}
			}

			var middle = Math.floor((start + end) / 2);

			var middleValue = arr[middle], nextValue = arr[middle + 1];

			if (middleValue !== nextValue){
				setMapObj(middleValue, map, middle, 'to');
			}

			uniqueIndex(start, middle, arr, map);
			uniqueIndex(middle + 1, end, arr, map);

		}

		function initUniqueStartObj(key, obj, value, toComparekey){
			if ((value > 0 && toComparekey !== key) || value === 0){
				setMapObj(key, obj, value, 'from');
			}
		}

		function initUniqueEndObj(key, obj, end, toCompareKey, arrLength){
			if (end > 0 && toCompareKey !== key){
				setMapObj(key, obj, end, 'from');

				if (end === arrLength - 1){
					setMapObj(key, obj, end, 'to');
				}
			}
		}


		function setMapObj(key, obj, value, prop){
			if (!obj[key]){
				obj[key] = {};
			}

			obj[key][prop] = value;
		}
    
    function loopThrough(arr, map){
				for (var i = 0; i < arr.length; i++){
					var item = arr[i];

					if (!map[item]){
						map[item] = {
            	from: i
            };
					}
          		if ((i + 1 < arr.length && arr[i + 1] !== item) || i + 1 === arr.length){
              	map[item].to = i
             ...