|
|
|
Последний добавленный элемент в объекте
|
|||
|---|---|---|---|
|
#18+
var obj = {}; В пустой объект добавляются индексы в качестве ключа obj[rowIndex] = 1; Значение значения не имеет, важно само существование объекта. Что позволяет напрямую проверить был такой индекс уже, или не было еще: if(obj[newIndex]) {} Так вот, в каком бы порядке не добавлялись индексы, а это числа, загадочным образом они сортируются от мин до макс. Последний элемент всегда самый большой индекс, первый - всегда самый маленький. Сначала я хотел юзать массив, оказалось что ява не дает прочитать определенный элемент не заполняя неиспользуемые элементы ундефайнедом. Если, допустим создать элемент arr[60000]=1;, то длина массив при чтении составит 60001 штуку. Это выборка строк из таблицы методом обычного, контрл- и шифт-тыка. Забавно что шифт-тык от верхних строк к нижним работает безупречно, а вот наоборот - поскольку последний элемент оказывается не тот - не пашет. Функции крайне простые и усложнять их всякими таймштампами очень не хочется. Короче, может есть какой-то способ запретить объекту сортироваться или получить настоящий последний добавленный элемент? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2013, 19:11 |
|
||
|
Последний добавленный элемент в объекте
|
|||
|---|---|---|---|
|
#18+
debloggerКороче, может есть какой-то способ запретить объекту сортироватьсянет. это зашито в реализации движка js. debloggerили получить настоящий последний добавленный элемент?только вручную. от таймштампов уйти не получится. Если нужен только один последний элемент, и элементы из коллекции не удаляются - все просто, запоминаем последний добавленный (кладем в переменную). Если нужен порядок добавления - можно складывать значения или названия ключей в массив. Прочее - по ситуации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2013, 19:19 |
|
||
|
Последний добавленный элемент в объекте
|
|||
|---|---|---|---|
|
#18+
Как обычно если в логике торчат бесполезные переменные и структуры, то значит логика неправильная. Заюзал все бесполезное и получилось. Значение переменной теперь - время и впору пришелся пустой цикл for(var key in ... - в котором я искал типа последний элемент в коллекции, в нем теперь выбирается реально последний элемент во времени. Это функция выбора строк в таблице по методу выбора файлов в списке. Осталось не очень красивое место определения диапазона строк при нажатии Shift, но все работает как в пределах глюкавости html'я в целом. Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. Некрасивое место на case 16: ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2013, 21:34 |
|
||
|
Последний добавленный элемент в объекте
|
|||
|---|---|---|---|
|
#18+
Хосподи, где тут кнопка редактирования, зафигачил с матами в комментах... :) Заколебал меня сегодня этот массивообъект. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2013, 21:36 |
|
||
|
Последний добавленный элемент в объекте
|
|||
|---|---|---|---|
|
#18+
debloggerЗначение значения не имеет, важно само существование объекта. Что позволяет напрямую проверить был такой индекс уже, или не было еще: if(obj[newIndex]) {} http://jsfiddle.net/qaCkt/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2013, 22:26 |
|
||
|
Последний добавленный элемент в объекте
|
|||
|---|---|---|---|
|
#18+
Паганель debloggerЗначение значения не имеет, важно само существование объекта. Что позволяет напрямую проверить был такой индекс уже, или не было еще: if(obj[newIndex]) {} http://jsfiddle.net/qaCkt/ А почему 0 does not exist? 0 существует и равен false. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2013, 23:53 |
|
||
|
Последний добавленный элемент в объекте
|
|||
|---|---|---|---|
|
#18+
AntonariyА почему 0 does not exist? 0 существует и равен false.вот и я о том же ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2013, 09:18 |
|
||
|
Последний добавленный элемент в объекте
|
|||
|---|---|---|---|
|
#18+
Паганель debloggerЗначение значения не имеет, важно само существование объекта. Что позволяет напрямую проверить был такой индекс уже, или не было еще: if(obj[newIndex]) {} http://jsfiddle.net/qaCkt/ Потому что индекс не может быть равен нулю (я имею ввиду в данном случае). Нафига воротить сложные проверки, если можно просто проверить индекс на ноль (0, false, undefined, "" и т.д.)? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2013, 09:42 |
|
||
|
Последний добавленный элемент в объекте
|
|||
|---|---|---|---|
|
#18+
ПрограмёрПаганель Потому что индекс не может быть равен нулю (я имею ввиду в данном случае). Нафига воротить сложные проверки, если можно просто проверить индекс на ноль (0, false, undefined, "" и т.д.)? :) ай блин )) Неправильно сказал. Тут вообще другое. Автор любому элементу присваивает значение 1... а значит проверка на if(obj[newIndex]) всегда будет давать true в случае существования элемента и false - если таковой создан не был. Вот так :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2013, 09:46 |
|
||
|
Последний добавленный элемент в объекте
|
|||
|---|---|---|---|
|
#18+
ПрограмёрАвтор любому элементу присваивает значение 1debloggerЗначение значения не имеет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2013, 09:58 |
|
||
|
Последний добавленный элемент в объекте
|
|||
|---|---|---|---|
|
#18+
ПаганельПрограмёрАвтор любому элементу присваивает значение 1debloggerЗначение значения не имеет Так, представим пример... Вам сервер (по какой-либо причине) отдаёт список записей id из таблицы. Как бы Вы это всё сохраняли, зная, что вся работа с этим списком ограничится (в данной части приложения) проверками на существование некоторой записи в таблице? Я бы сохранил (собственно уже не раз так делал) этот список как json массив, где ключ - id записи, а значение для всех выставил бы в 1 или true (по настроению ). В этом случае, для меня тоже "значение значения не имеет", так как мне важен только ключ. Но никто не отменял факт, что у всех элементов значение 1 (true) :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2013, 12:53 |
|
||
|
Последний добавленный элемент в объекте
|
|||
|---|---|---|---|
|
#18+
ну конечно не имеет. лишь бы не false ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2013, 13:02 |
|
||
|
Последний добавленный элемент в объекте
|
|||
|---|---|---|---|
|
#18+
Паганель, Ну да, значение имеет не 0, всё остальное отличное от 0 значение не имеет. Так надо было сформулировать. Кстати, на php $arr = Array(); $arr[50000] = 1; дает sizeof($arr) == 1, а не 50001 как на явескрипте. Отсталый езыг, понимаешь, этот js. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2013, 16:15 |
|
||
|
Последний добавленный элемент в объекте
|
|||
|---|---|---|---|
|
#18+
Метод проверки exist - exists. http://stackoverflow.com/questions/1098040/checking-if-an-associative-array-key-exists-in-javascript А "все так делают" потому что так халявнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2013, 16:19 |
|
||
|
Последний добавленный элемент в объекте
|
|||
|---|---|---|---|
|
#18+
debloggerКстати, на php $arr = Array(); $arr[50000] = 1; дает sizeof($arr) == 1, а не 50001 как на явескрипте. Отсталый езыг, понимаешь, этот js. :)массив (по определению) - это набор элементов, имеющих последовательно расположенные индексы. все остальное - "карта", "словарь", "хэштаблица" и т.д. так что в данном примере пхп явно неправ, если в нем массив ведет себя как непонятно что. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2013, 16:21 |
|
||
|
Последний добавленный элемент в объекте
|
|||
|---|---|---|---|
|
#18+
Яростный Меч, Вполне понятно что если захотеть сделать так, чтобы в ячейке памяти 2, 30035 и 50001 хранились 1 отождествляющие некие сущности, то придется занять память со смещением Х от 2 до 50001 и поручить кому-то добавлять и вычитать смещение. Поэтому массив не может разрываться, поскольку изначально это тупо область памяти по адресу А со смещением С, на длину Л слов. Ну а кого сейчас волнует как оно на низком уровне. Я ж не пишу на ассемблере для веба. Это пусть Си выделяет, закрывает, контролирует, итерирует и все такое. php в отличии от явы не изображает "настоящий" массив. Как записали - так и выдает, оперируя внутренне. За каким чертом ява корчит из себя настоящий езыг - это непонятно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2013, 16:57 |
|
||
|
Последний добавленный элемент в объекте
|
|||
|---|---|---|---|
|
#18+
Яростный МечdebloggerКстати, на php $arr = Array(); $arr[50000] = 1; дает sizeof($arr) == 1, а не 50001 как на явескрипте. Отсталый езыг, понимаешь, этот js. :)массив (по определению) - это набор элементов, имеющих последовательно расположенные индексы. Вы верите что если я напишу var arr = new Array(20); то мне выделят область памяти в 20 слов на хранение 20 указателей? И конечно arr[50000]=1 ничего такого не выделяет. Но изображая правильный язык js заполняет пустые индексы неопределенностью при попытке получить ссылку на массив в целом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2013, 17:02 |
|
||
|
Последний добавленный элемент в объекте
|
|||
|---|---|---|---|
|
#18+
debloggerЯростный Меч, Вполне понятно что если захотеть сделать так, чтобы в ячейке памяти 2, 30035 и 50001 хранились 1 отождествляющие некие сущности, то придется занять память со смещением Х от 2 до 50001 и поручить кому-то добавлять и вычитать смещение. Поэтому массив не может разрываться, поскольку изначально это тупо область памяти по адресу А со смещением С, на длину Л слов. Ну а кого сейчас волнует как оно на низком уровне. Я ж не пишу на ассемблере для веба. Это пусть Си выделяет, закрывает, контролирует, итерирует и все такое. php в отличии от явы не изображает "настоящий" массив. Как записали - так и выдает, оперируя внутренне. За каким чертом ява корчит из себя настоящий езыг - это непонятно. Хм... массивы в php намного хитрее :). Там в принципе нету привычных массивов, если уж так. В php array больше похож не на массив, а на словарь. Разные там hash таблицы и т.д. Потому в php и получается count(array(1=>true, 1000=>true)) == 2. Принцип просто другой. Кстати, если брать php массивы, то это то же самое, что и json в js. Так что тут всё правильно и так и должно быть. По поводу выделения памяти в js не уверен, но думаю что если arr=[]; arr[1000000]=true, то как-раз несколько метров памяти и выделится. Хотя не уверен... Все эти автоматические приведения типов, сборщики мусора и тому подобное... Сколько уже пишу на этих скриптах, никак в их суть вникнуть не могу что и как работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2013, 18:13 |
|
||
|
Последний добавленный элемент в объекте
|
|||
|---|---|---|---|
|
#18+
ПрограмёрПо поводу выделения памяти в js не уверен, но думаю что если arr=[]; arr[1000000]=true, то как-раз несколько метров памяти и выделится. Хотя не уверен... Все эти автоматические приведения типов, сборщики мусора и тому подобное... Сколько уже пишу на этих скриптах, никак в их суть вникнуть не могу что и как работает.это детали реализации, они могут быть разными в разных движках, так что тут нельзя ничего сказать наверняка. Но так уж устаканилось, что если в массиве есть элемент с индексом 10, то должны быть и элементы с индексами до 10. Хотя бы виртуально. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2013, 18:46 |
|
||
|
Последний добавленный элемент в объекте
|
|||
|---|---|---|---|
|
#18+
Господа, вы о чем пишите? Массив делается вот так: "массив делается вот так" или вот так https://en.wikipedia.org/wiki/C_dynamic_memory_allocation Отсюда вопрос. Как вы измерите длину массива? Ну то есть перед вами 1000 байт в которые можно записать что угодно. Может быть по 0? Но данные могут содержать 0. Следовательно придется завести небольшую БД где оперативно по событиям отмечать место начала массива и его протяженность в некоторых единицах измерения, скажем в машинных словах. Дальше еще хуже. В массив можно записать такие данные, которые на самом деле адрес другого массива и так далее. Возникает система управления массивами - выделенной памятью. От всего этого пользователи языков высокого уровня избавлены. Чем выше уровень тем выше уровень абстракции. Насколько я понимаю массивы в яве и пхп это просто коллекции записей, да, создав массив вы создаете небольшую БД. Именно ради этого и затевался ПрограмёрКстати, если брать php массивы, то это то же самое, что и json в js. чтобы эти небольшие БД оперативненько передавать по проводам как текст. Но я хотел вас огорчить, первый же пример в википедии насчет жейсона может быть в точности воспроизведен на xml, которому, если вы не в курсе, уже более 30 лет, а методу сериализации объедков - всего 11. Отсюда вопрос. А что мешало превращать объекты в xml и поддержать это в компиляторе? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2013, 18:26 |
|
||
|
Последний добавленный элемент в объекте
|
|||
|---|---|---|---|
|
#18+
Конечно, вот я сохранил настройки скрипта на диске. Код: javascript 1. Прямо из toSource(); чтобы потом загрузить и прямо из eval'а продолжить. Но поскольку json вовсе не ява-специфичный, и поскольку мне-то все равно как оно там хранится, то почему бы не хранить в максимально абстрактном виде с максимально полной информацией обо всем? Ну, допустим бы ява натурально парсила бы ini-файлы. Ну и писали бы я в ини, а какая-то функция типа fromIni() превращала бы текст в переменные, в числа, буквы и все такое. На хмеле было бы так <name>"Ellipse"</name> <shape>0</shape> <units>cm</units> <skew>0</skew> <radius> <top>0</top> <right>0</right> <bottom>0</bottom> <left>0</left> </radius> <smooth> <top>0</top> <right>1</right> <bottom>1</bottom> <left>0</left> </smooth> Найдите два отличия. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2013, 18:37 |
|
||
|
Последний добавленный элемент в объекте
|
|||
|---|---|---|---|
|
#18+
debloggerПрограмёрКстати, если брать php массивы, то это то же самое, что и json в js. чтобы эти небольшие БД оперативненько передавать по проводам как текст. Но я хотел вас огорчить, первый же пример в википедии насчет жейсона может быть в точности воспроизведен на xml, которому, если вы не в курсе, уже более 30 лет, а методу сериализации объедков - всего 11. Отсюда вопрос. А что мешало превращать объекты в xml и поддержать это в компиляторе? Я привёл аналогию. Разумеется не то же самое... Не знаю просто как правильно выразить. наверное "php массивы в приближении соответствуют json в js". А вот по поводу "что мешало"... Я уж не знаю, но логически предполагаю, что были проблемы в бинарными данными. Но если не прав - просветите пожалуйста :). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2013, 18:38 |
|
||
|
Последний добавленный элемент в объекте
|
|||
|---|---|---|---|
|
#18+
debloggerНайдите два отличия.1) объем данных 2) в хмл все значения - строки, никак не определить, что в <shape>0</shape> число. Понятно, в скрипте это бы разрулилось, но только приведением типов вручную. А так - уже готовый объект. К тому же непонятно, как в xml записывать массивы. в любом случае придется придумывать какие-то соглашения. В общем, xml можно легко спарсить в DOM, но однозначно собрать по нему js-ный объект в общем случае нельзя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2013, 18:48 |
|
||
|
Последний добавленный элемент в объекте
|
|||
|---|---|---|---|
|
#18+
Как будто на яс есть типы данных без отношений. Про двоичные не надо грязи. Почту отправляете? Ну так посмотрите как выглядит письмо с фоткой внутри изнутри, а не снаружи. В xml все валится точно так же, как в яву. Любые ресурсы. Сохраните вордовский док с картинками в хмеле и убедитесь. Тем не менее если нужен тип данных так и напишите <width> <type>INT</type> 10 <width> У меня ж в примере есть сведения о единицах измерения - cm - то же самое. xml не запрещает абсолютно ничего из того, что можно описать в xml. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2013, 19:04 |
|
||
|
Последний добавленный элемент в объекте
|
|||
|---|---|---|---|
|
#18+
Отношения в ясе это все. Пока я складывал высоту и ширину все было нормально, как только захотел умножить выяснилось что оперирую объектами. Недаром же в правильных скриптах повсюду торчат typeof и parseInt. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2013, 19:08 |
|
||
|
Последний добавленный элемент в объекте
|
|||
|---|---|---|---|
|
#18+
debloggerКак будто на яс есть типы данных без отношений. Про двоичные не надо грязи. Почту отправляете? Ну так посмотрите как выглядит письмо с фоткой внутри изнутри, а не снаружи. В xml все валится точно так же, как в яву. Любые ресурсы. Сохраните вордовский док с картинками в хмеле и убедитесь. Тем не менее если нужен тип данных так и напишите <width> <type>INT</type> 10 <width> У меня ж в примере есть сведения о единицах измерения - cm - то же самое. xml не запрещает абсолютно ничего из того, что можно описать в xml. Ну так просветляйте нас . Вы задали вопрос, а к чему, я пока понять не могу. То есть из Ваших слов просматривается, что ответ должен опровергнуть мои слова, но какие и как я понять не могу. Рассказывайте пожалуйста. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2013, 19:14 |
|
||
|
Последний добавленный элемент в объекте
|
|||
|---|---|---|---|
|
#18+
Что-то я автора не понял. Сначала он пишет про объект, потом про массив. Массив есть объект, но объект не обязательно есть массив. Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2013, 10:20 |
|
||
|
|

start [/forum/topic.php?all=1&fid=22&tid=1448051]: |
0ms |
get settings: |
10ms |
get forum list: |
21ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
188ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
64ms |
get tp. blocked users: |
1ms |
| others: | 238ms |
| total: | 544ms |

| 0 / 0 |
