JSFiddle - React, Tailwind, and code Playground
JavaScript
var charlist = ['a', 'b', 'b', 'c', 'd', 'c', 'd', 'a'];
raw(charlist);
function raw(list) {
var resultList = {};
for (var i = 0; i < list.length; i++) {
var item = list[i];
var left = findSiblings(list, 0, i);
var right = findSiblings(list, i + 1, list.length);
var wrapperChars = charsBetween(item, left, right);
resultList = addToResultList(resultList, item, wrapperChars);
}
printResult(resultList);
}
function printResult(resultList) {
for (var item in resultList) {
var line = getLine(resultList[item].length);
document.write(line + item + '<br>');
}
}
function addToResultList(list, item, wrappers) {
var oldWrappers = list[item];
if (oldWrappers !== undefined) {
for (var i = 0; i < wrappers.length; i++) {
var isExist = false;
for (var j = 0; j < oldWrappers.length; j++) {
if (wrappers[i] === oldWrappers[j])
isExist = true;
}
if (!isExist) {
list[item].push(wrappers[i]);
}
}
} else {
list[item] = wrappers;
}
return list;
}
function findSiblings(list, firstIndex, lastIndex, item) {
var chars = [];
for (var i = firstIndex; i < lastIndex; i++) {
chars = addWithoutDuplicate(chars, list[i]);
}
return chars;
}
function addWithoutDuplicate(array, item) {
var isExist = false;
for (var i = 0; i < array.length; i++) {
if (array[i] === item) isExist = true;
}
if (!isExist) array.push(item);
return array;
}
function charsBetween(item, left, right) {
var wrapperChars = [];
for (var i = 0; i < left.length; i++) {
for (var j = 0; j < right.length; j++) {
if (left[i] === right[j]) {
if (left[i] !== item) {
wrapperChars = addWithoutDuplicate(wrapperChars, left[i]);
}
}
}
}
return wrapperChars;
}
function getLine(count) {
var lines = '';
for (var i = 0; i < count; i++) {
lines += '_';
}
return lines;
}