Предположим, что все, что у вас есть внутри каждого массива, это только цифры или тексты, так что это может быть осуществимым подходом без зацикливания любого массива:
(см. Скрипку здесь )
Код:
A = [1,2,3];
B = [1,2,3];
C = [1,2,3];
D = [10,11,12];
E = [10,11,12];
F = [10,11,12];
G = [13,14];
H = [13,14];
function compareArr(arrList){
var S = '@' + arrList.join('@');
var re = /(@[^@]+)(@.*)?(\1)(@|$)/gi
var afterReplace=''; var i=0;
while(afterReplace!=S && i<100){
afterReplace=S;
S = S.replace( re, "$1$2$4" )
i++
}
return S.substr(1,S.length-1).replace(/@/g,'<br>')
}
$('html').append( compareArr([A,B,C,D,E,F,G,H]) )
Стратегия заключается в объединении всего массива в строку с "@" в качестве разделителя. Затем с помощью регулярных выражений замените весь дублированный фрагмент внутри строки, наконец разбейте строку и получите список уникальных массивов.
Причина использования цикла while в моем коде заключается лишь в том, что я не могу написать лучший шаблон регулярных выражений для удаления дублируемой части сразу. В поисках лучшего регулярного выражения?