Я думаю, вы действительно хотели написать:
<script type="text/javascript">
var a = ['a','b','c','d','e'];
var b = ['a','d','e','c'];
</script>
В любом случае вы можете отсортировать массивы и получить значения из одного, которого нет в другом, и наоборот, а затем объединить два набора в один. Вы, кажется, избалованы выбором, поэтому вот хорошая базовая версия JavaScript, которая должна работать в большинстве браузеров Использование новых функций новейших браузеров наверняка приведет к сбою в старых браузерах.
// Compares a to b. Returns all the elements in a that are not in b
// If c provided, add unique elements to c
function getUnique(a, b, c) {
var c = c || [];
var ta = a.slice().sort();
var tb = b.slice().sort();
var x, y, found = false;
for (var i=0, iLen=ta.length; i<iLen; i++) {
x = ta.shift();
for (var j=0; j<tb.length && !found; j++) { // j.length changes each loop
if (tb[j] == x) {
tb.splice(j,1); // Remove match from b
found = true;
}
}
if (!found) {
c.push(x); // If no match found, store in result
}
found = false;
}
return c;
}
var a = ['a','b','d'];
var b = ['b','e'];
var d = getUnique(a, b);
alert(d);
var c = getUnique(b,a,d);
alert(d);
Но ваш комментарий к первому ответу указывает на то, что вам нужны элементы, общие для обоих массивов, что проще:
function getCommon(a, b) {
var c = [];
var ta = a.slice().sort();
var tb = b.slice().sort();
var t, found;
for (var i=0, iLen=ta.length; i<iLen; i++) {
t = ta[i];
found = false;
for (var j=0, jLen=tb.length; j<jLen && !found; j++) {
if (t == tb[j]) {
c.push(tb.splice(j,1));
found = true;
}
}
}
return c;
}
alert(getCommon(a, b));
Вам нужно решить, что делать с дубликатами. В первом случае дубликаты будут рассматриваться как уникальные, если в другом массиве нет дубликатов. В вышесказанном дубликаты не имеют значения, если они не дублируются в обоих массивах.