function array_unique( array ) { // Removes duplicate values from an array
//
// + original by: Carlos R. L. Rodrigues
var p, i, j;
for(i = array.length; i;){
for(p = --i; p > 0;){
if(array[i] === array[--p]){
for(j = p; --p && array[i] === array[p];);
i -= array.splice(p + 1, j - p).length;
}
}
}
return true;
}
здравствуйте, могли бы вы указать автора этой функции?
анонимус, Вы про которую?
Там в комментариях указан автор -- Carlos R. L. Rodrigues
Если Вы про ту, что в моем посте, то я и автор
function array_unique(arr) { var tmp_arr = new Array(); for (i = 0; i < arr.length; i++) { if (tmp_arr.indexOf(arr[i]) == "-1") { tmp_arr.push(arr[i]); } } return tmp_arr; }Эта функция не работает в IE
Вызывает ошибку
>Эта функция не работает в IE
>Вызывает ошибку
К сожалению, да, потому что IE не поддерживает метод indexOf для массивов. Для IE нужно писать костыль с циклом для перебора всех значений (использовать вариант, приведенный выше)
В коде этой функции нету вызова indexOf
Подскажите, пожалуйста, как сделать, чтобы эта функция производила регистронезависимое сравнение элементов массива. Пытаюсь применить
array[i].toLowerCase() === array[--p].toLowerCase(), не срабатывает
Сорри, всё получилось.
Функция не пашет...
var a = ['1', '1', '1', '2', '2', '3'];
array_unique(a);
в итоге: '1', '1', '2', '3'
А почему не просто:
function array_unique(inArr){ var uniHash={}, outArr=[], i=inArr.length; while(i--) uniHash[inArr[i]]=i; for(i in uniHash) outArr.push(i); return outArr }Какие-то подводные камни?