все давно продумано: правильная версия 2 на дклабе 
	
Array.prototype.union = function(list, callback)
{
        if ( 'function' != typeof callback ) {
                callback = function(value1, value2)
                {
                        return value1 != value2;
                }
        }
        var result = this;
        var L = result.length;
        var j;
        var u;
SEARCH_UNIQUE:
        for (var i = 0; i < list.length; i++) {
                j = 0;
                u = true;
                while ( j < L ) {
                        u = callback(result[j], list[i]);
                        if ( ! u ) {
                                continue SEARCH_UNIQUE;
                        }
                        j++;
                }
                result[L] = list[i];
                L++;
        }
        return result;
}
var arr1 = [1, 2, 3, 4];
var arr2 = [1, 4, 5, 6];
arr1.union(arr2);
alert(arr1);
var arr4 = [].union([1, 1, 3, 1, 4, 3, 5]);
alert(arr4);
 | 
	
		
 Цитата: 
	
  | 
	
		
 На всякий случай  
	Цитата: 
	
 
var array = [1, 2, 1, 10, 5, 3, 4, 40, 50], i = array.length, result = [];
array.sort(function(a,b) {
*!*
    return b-a;
*/!*
});
while(i--){
    if(result.join().search(array[i]+'\\b') == '-1') {
        result.push(array[i]);
    }
}
alert(result);
 | 
	
		
 Цитата: 
	
  | 
	
		
 with-love-from-siberia, 
	Ваш пример не делает начальный массив массивом только с уникальными данными, если он изначально содержит неуникальные данные, можно конечно обьеднить с пустым массивом, для получения уникального. Вариант получения массива с уникальными данными из нескольких массивов, при желании полученный результирующий массив можно затем отсортировать дополнительно. 
Array.prototype.unique = function () {
    for (var d = arguments.length, a = 0; a < d; a++)
    for (var c = arguments[a], b = 0; b < c.length; b++) this.push(c[b]);
    for (a = 0; a < this.length; a++)
    for (b = a + 1; b < this.length;) if (this[a] === this[b]) this.splice(b, 1);
    else b++;
    return this
};
var arr1 = [4, 4, 1, 2, 3, 4, 1, 2, 3, 4];
var arr2 = [1, 4, 5, 6];
var arr3 = [7, 6, 5, 4];
arr1.unique(arr2,arr3);
alert(arr1);
. | 
	
		
 x-yuri, 
	Моя вина - неудачная фраза. Подразумевается сохранность порядка элементов в массиве. рони, Простите меня, но я не до конца понял Вас. Правильно ли я понял, что Вы имеете в виду код, например, подобный этому? var arr1 = [4, 4, 1, 2, 3, 4, 1, 2, 3, 4]; arr1.unique();  | 
	
		
 x-yuri, я лишь хотел показать альтернативный (без slice'a) и менее громозкий вариант решения, относительно представленного ранее, а вариант Zeroglif'a безусловно могуч :) 
	 | 
	
		
 with-love-from-siberia, 
	Да)))  | 
	
		
 monolithed, а Array.indexOf на что? 
	UPD Это слегка запоздалое сообщение :)  | 
	
		
 Вот еще один вариант: 
	var a = [1,1,2,3,4,4,1,5,1,6,1,1,7,1,1,7,1,1,7,1,1,1,8,0,9, 9,9,1]; var b = []; a.sort(); console.log(a); var i=0; while (i < a.length) { if (a[i] != a[i+1]) { b.push(a[i]); } i++; } console.log(b);  | 
| Часовой пояс GMT +3, время: 05:52. |