Livaanderiamarum,
Дока :
function duplicat(b, c) {
for (var d = [], e = {},a = 0; a < b.length; a++) e[b[a]]? e[b[a]]++:e[b[a]]=1 ;
// создаём обьект c, где ключами являются значения первого массива
// e[b[a]]? -> ключ есть ? это на тот случай если значения повторятся в массиве
// увеличиваем значение ключа на 1
// иначе если ещё ключа нет с таким значением
// создаём ключ со значением 1
for (a = 0; a < c.length; a++) e[c[a]] && d.push(c[a]) && e[c[a]]--;
//пробегаемся по второму массиву
// смотрим если значение элемента массива среди ключей
// нами созданного обьекта и его значение ещё не ноль -> e[c[a]]
// если ключ есть, заносим ключ в промежуточный массив d -> d.push(c[a])
// значение самого ключа уменьшаем
return d.length == b.length && c.length == b.length
// проверяем длину промежуточного массива d c длиной массива b
// они должны совпадать -> d.length == b.length
// плюс должна совпадать размерность исходных массивов -> c.length == b.length
// последнюю проверку можно поставить в начало
};
Ок?