|
|
|
|
|
для: АЯ
(09.12.2009 в 16:36)
| | Да, точно!
АЯ, Большое-прибольшое Вам Спасибо!!! :) | |
|
|
|
|
|
|
|
для: HelloMoto
(09.12.2009 в 14:53)
| | Вы разберитесь с "текущим вариантом" (с последним кодом) - там как раз ищется по ключу.
И ваш var hash = {}; - он уже "заюзан" как var H = new Array ();
И работает всё как раз быстро как только можно - никакого "поиска по массиву" нет. | |
|
|
|
|
|
|
|
для: АЯ
(08.12.2009 в 15:54)
| | АЯ, ммм... не совсем то..
Надо заюзать вот это: var hash = {};, где по ключу будем искать.... так как текущий вариант медленно работает из-за поиска в массиве.... | |
|
|
|
|
|
|
|
для: HelloMoto
(08.12.2009 в 14:29)
| | Если изначально (в первый раз) передаваемый массив будет у вас пустым, то можно.
Но hashmap нужен будет глобальный - до первого обращения к функции вам надо его объявить.
<script>
var H = new Array ();
//...
function arrayUnique (projects, project)
{
var r = (!H [project]) ? true : false; H [project] = 9;
projects [projects.length] = project; return r;
}
//вызов функции arrayUnique ()
|
| |
|
|
|
|
|
|
|
для: HelloMoto
(08.12.2009 в 13:36)
| | Эх.. всё же ещё вопросик..
а как здесь
for (var r = true, j = 0, l = projects.length; j < l; j++)
if (projects [j] == project) {r = false; break}
projects [l] = project; return r;
|
можно заюзать hashmap вместо массива? Ну чтобы не по массиву бегать, а по hashmap... | |
|
|
|
|
|
|
|
для: АЯ
(07.12.2009 в 23:20)
| | Да, всё ОК!
Спасибо, AlexSol.
Отдельное спасибо вам, АЯ! Спасибо, что вы есть! :) | |
|
|
|
|
|
|
|
для: HelloMoto
(07.12.2009 в 22:01)
| |
function arrayUnique (projects, project)
{
for (var r = true, j = 0, l = projects.length; j < l; j++)
if (projects [j] == project) {r = false; break}
projects [l] = project; return r;
}
//для проверки
var pros = ['Иванов', 'Петров', 'Сидоров', 'Кузнецов'];
var pro_1 = 'Иванов'; //имеется
var pro_2 = 'Шариков'; //уникальное
alert (arrayUnique (pros, pro_1)); //false для Иванова
alert (arrayUnique (pros, pro_2)); //true для Шарикова
|
| |
|
|
|
|
|
|
|
для: HelloMoto
(07.12.2009 в 22:01)
| | текущее значение всегда будет в массиве. вы проверяйте сначала, а потом добавляйте его.
перенесите в конец функции projects [projects.length] = project; | |
|
|
|
|
|
|
|
для: АЯ
(07.12.2009 в 19:09)
| |
...
for(...){
if(arrayUnique(projects, project)){...}
}
...
function arrayUnique(projects, project) {
var isExist;
projects [projects.length] = project;
for(var i=0; i <= projects.length; i++){
if(projects[i] == project){
isExist = false;
break;
} else {isExist = true;break;}
}
return isExist;
}
|
С каждым вызовом arrayUnique в цикле for массив projects заполняется разными значениями - как одинаковыми, так и нет. Что-то не то.. работает некорректно :(
Что не так? туплю...
Мне надо возвращать true только тогда, когда текущего значения в массиве нет. Как изменить моё условие, оно неверное, я вижу ) | |
|
|
|
|
|
|
|
для: HelloMoto
(07.12.2009 в 18:46)
| | Так, вроде бы понял.
Вам по-любому надо Иванова к списку добавить, но при этом сообщить - первый
ли это Иванов в списке или же у него же были однофамильцы в этом списке.
Ну это вы и сами можете сделать:
1. или циклом перебирайте весь массив и сравнивайте с новым элементом; как
только встретите Иванова, так и выходите из цикла брейком (чтобы третьих и
четвертых "ивановых" не искать)
2. или преобразуйте массив в строку (с каким-то уникальным
разделителем) + добавьте этот же разделитель в начало и конец и методом
search () ищите совпадение в этой строке
с RegExp = 'разделитель' + новый_элемент + 'разделитель';.
Но это много медленнее первого варианта.
---
Кстати, зря вы "упёрлись" в метод push () - он тормозной. Запустите:
<script>
var s = [1, 2, 3], d = 4;
function arrayUnique (ar, a) {ar.push (a)}
function faster (ar, a) {ar [ar.length] = a}
var T1 = new Date ().valueOf (); for (var j = 0; j < 98765; j++) arrayUnique (s, d);
var T2 = new Date ().valueOf (); for (var j = 0; j < 98765; j++) faster (s, d);
var T3 = new Date ().valueOf ();
alert ('push () работает ~ в ' + (T2 - T1) / (T3 - T2) + ' раза медленнее');
</script>
| и удостоверьтесь. | |
|
|
|
|