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;
}
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; }здравствуйте, могли бы вы указать автора этой функции?
анонимус, Вы про которую?
Там в комментариях указан автор -- 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
Вызывает ошибку
function in_array(needle, haystack) { // Checks if a value exists in an array var found = false, key; for (key in haystack) { if (haystack[key] === needle){ found = true; break; } } return found; } function array_unique(arr) { var tmp_arr = new Array(); for (i = 0; i < arr.length; i++) { if (!in_array(arr[i],tmp_arr) ) { tmp_arr.push(arr[i]); } } return tmp_arr; }>Эта функция не работает в 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 RemoveDuplicateFromArray(Arr) {
var Cur, j, i = 0;
while (i < Arr.length) {
Cur = Arr[i];
for (j = i + 1; j < Arr.length; j++) {
if (Cur == Arr[j]) {
Arr.splice(i, 1);
i--;
break;
}
}
i++;
}
}
А почему не просто:
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 }Какие-то подводные камни?
Отправить комментарий
Приветствуются комментарии:- Полезные.
- Дополняющие прочитанное.
- Вопросы по прочитанному. Именно по прочитанному, чтобы ответ на него помог другим разобраться в предмете статьи. Другие вопросы могут быть удалены.
P.S. Лучшее "спасибо" - не комментарий, как все здорово, а рекомендация или ссылка на статью.Для остальных вопросов и обсуждений есть форум.