[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: массивы в javascript
cage
Дан массив в javascript,как определить с помощью каких методов принадлежит ли элемент массиву



Спустя 2 минуты, 49 секунд (24.05.2007 - 13:23) vasa_c написал(а):
Не понял.
Элемент он сам по себе, никому он не принадлежит, на него могут быть просто ссыли из массивов и т.п.
Или ты хочешь узнать есть ли в массиве заданное значение?

Спустя 41 минута, 11 секунд (24.05.2007 - 14:04) cage написал(а):
да точно ,хочу узнать есть ли данное значение

Спустя 31 минута, 47 секунд (24.05.2007 - 14:36) vasa_c написал(а):
Перебери в цикле

Спустя 6 минут, 23 секунды (24.05.2007 - 14:42) cage написал(а):
гениально,вася,от кого угодно только не от тебя,я то думал что ты меня обрадуешь и скажешь что есть метод наподобия inarray()

Спустя 2 минуты, 49 секунд (24.05.2007 - 14:45) md5 написал(а):
для наиболее извращенных:
передаём JS массив на сторону сервера по средствам ajax
там заюзываем in_array() в php
и отправляем ответ в виде XML
smile.gif

Спустя 12 минут, 6 секунд (24.05.2007 - 14:57) AlexBB написал(а):
Цитата(cage @ 24.5.2007, 15:42) [snapback]21177[/snapback]
я то думал что ты меня обрадуешь и скажешь что есть метод наподобия inarray()


Кто мешает его написать и юзать впоследствии?

ЗЫ. in_array (в php c подчерком)

Спустя 32 минуты, 44 секунды (24.05.2007 - 15:30) vasa_c написал(а):
cage, на, я сегодня добрый, хотя ты и не заслужил:
Код
Array.prototype.in_array = (function(val) {
   for (var i = 0; i < this.length; i++) {
      if (this[i] == val) {
          return true;
      }
   }
   return false;
});

Спустя 15 минут, 21 секунда (24.05.2007 - 15:45) AlexBB написал(а):
А я типа еще добрее. )
Если чуть-чуть модифицировать цикл, то будет работать и для ассоциативных массивов

Код
Array.prototype.in_array = function(val)
{
   for (key in this)
   {
      if (this[key] == val)
      {
          return true;
      }
   }
   return false;
}

Спустя 27 минут, 58 секунд (24.05.2007 - 16:13) cage написал(а):
vasa_c ты меня недооцениваешь,такое я и сам смогу написать,я думал просто что уже есть готовый метод,и хотел точно узнать есть он или нет,ну из принципа блин,а вы тут наезжаете на меня
Но все равно спасибо)))
2AlexBB можешь писать свой ZEND)))))

Спустя 31 минута, 21 секунда (24.05.2007 - 16:44) vasa_c написал(а):
AlexBB, в JS нет ассоциативных массивов, есть объекты, но тогда нужно Object.Prototype smile.gif

Спустя 22 минуты, 40 секунд (24.05.2007 - 17:07) AlexBB написал(а):
Почему нет?
Нет нормальной конструкции для их иниациализации это да, приходится делать:

a = new Array();
a['key1'] = 'value1';
a['key2'] = 'value2';

Это вполне себе хеш-массив (можно так назвать если ассоциативный не нравится) и код мой нормально с ним работает. Хотя действительно, массив сам по себе является объектом.

Еще могу заметить, что конструкция for(key in arr) работает существенно медленнее (по крайней мере в IE), чем обычный for. Поэтому для идеального фреймфорка, наверно имеет смысл завести оба метода на все случаи.

Цитата
2AlexBB можешь писать свой ZEND)))))

Уже писал smile.gif

Спустя 1 день, 2 часа, 44 минуты, 24 секунды (25.05.2007 - 19:51) AKS написал(а):
Оба предложенных варианта могут легко преподнести сюрпризы. Например:
Код
var string = '\u0030';

var array = [new Number()];

var result = array.in_array(string);

Какой будет результат?

Спустя 57 минут, 29 секунд (25.05.2007 - 20:49) vasa_c написал(а):
Такой же, как и так:
Цитата
var array = [0];
alert(array.in_array(""));
alert(array.in_array(false));


Вот так всегда, придет AKS и всё испортит smile.gif
Надеюсь "===" решит проблему или ещё есть сюрпризы?

Спустя 9 часов, 52 минуты, 12 секунд (26.05.2007 - 06:41) AKS написал(а):
Цитата(vasa_c @ 25.5.2007, 23:49) [snapback]21295[/snapback]
Надеюсь "===" решит проблему или ещё есть сюрпризы?

Да я ведь сам тоже не знаю...
Наверно проверка на строгое соответствие получше. Хотя если писать не для себя, а для того, чтобы всем "было хорошо", то...
Например вот это:
Код
var string = (1.03333).toFixed(2);

var array = [1.03];

var result = array.in_array(string);

не пройдет строгой проверки. Или если кто-то будет использовать новые (из 1.6) методы встроенных объектов, не "оглядываясь" на конвертацию, то:
Код
var num = 15;

var new_num = String.replace(num, /5/, '2');

var array = [12];

var result = array.in_array(new_num);

результат будет не тем, который нужен.
Короче говоря, для себя написать - это еще можно, а вот создать "реальный" Array.prototype.in_array...

Спустя 2 часа, 7 минут, 36 секунд (26.05.2007 - 08:49) vasa_c написал(а):
Цитата
Да я ведь сам тоже не знаю...

Не верю smile.gif

Цитата
результат будет не тем, который нужен

Почему? Там строка, тут число. На выходе — false.

Спустя 1 час, 55 минут, 38 секунд (26.05.2007 - 10:44) AKS написал(а):
Цитата(vasa_c @ 26.5.2007, 11:49) [snapback]21306[/snapback]
Почему? Там строка, тут число. На выходе — false.

Значит неудачный пример я выбрал - мне показалось, что не все так очевидно.


_____________
you can see me only when die
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.