powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Последний добавленный элемент в объекте
25 сообщений из 27, страница 1 из 2
Последний добавленный элемент в объекте
    #38347802
deblogger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
var obj = {};

В пустой объект добавляются индексы в качестве ключа

obj[rowIndex] = 1;

Значение значения не имеет, важно само существование объекта. Что позволяет напрямую проверить был такой индекс уже, или не было еще:

if(obj[newIndex]) {}

Так вот, в каком бы порядке не добавлялись индексы, а это числа, загадочным образом они сортируются от мин до макс. Последний элемент всегда самый большой индекс, первый - всегда самый маленький.

Сначала я хотел юзать массив, оказалось что ява не дает прочитать определенный элемент не заполняя неиспользуемые элементы ундефайнедом. Если, допустим создать элемент arr[60000]=1;, то длина массив при чтении составит 60001 штуку.

Это выборка строк из таблицы методом обычного, контрл- и шифт-тыка. Забавно что шифт-тык от верхних строк к нижним работает безупречно, а вот наоборот - поскольку последний элемент оказывается не тот - не пашет.

Функции крайне простые и усложнять их всякими таймштампами очень не хочется. Короче, может есть какой-то способ запретить объекту сортироваться или получить настоящий последний добавленный элемент?
...
Рейтинг: 0 / 0
Последний добавленный элемент в объекте
    #38347813
Фотография Яростный Меч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
debloggerКороче, может есть какой-то способ запретить объекту сортироватьсянет. это зашито в реализации движка js.
debloggerили получить настоящий последний добавленный элемент?только вручную. от таймштампов уйти не получится.
Если нужен только один последний элемент, и элементы из коллекции не удаляются - все просто, запоминаем последний добавленный (кладем в переменную).
Если нужен порядок добавления - можно складывать значения или названия ключей в массив.
Прочее - по ситуации.
...
Рейтинг: 0 / 0
Последний добавленный элемент в объекте
    #38347937
deblogger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как обычно если в логике торчат бесполезные переменные и структуры, то значит логика неправильная. Заюзал все бесполезное и получилось. Значение переменной теперь - время и впору пришелся пустой цикл 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.
// rowIndex - clicked row index
function toggleRowIndex(rowIndex) {
	
	// fucking time id for non-sortable externally but sorted internally obj
	var t = new Date().getTime(); 
	
	switch(mod_key) {
		// ctrl, add/remove single row to/from selection
		case 17:
			if(selected_row[rowIndex]) delete selected_row[rowIndex];
			else selected_row[rowIndex] = t;
		break;
		
		// shift, add range rows to selection
		case 16:
			var max = 0, lastIndex = 1;
			for(var key in selected_row){	
				if(selected_row[key] > max) lastIndex = key;
				max = selected_row[key];
			}

			var diff = lastIndex - rowIndex;
			do {
				selected_row[rowIndex + diff] = t;
				if(diff == 0) break;
				if(diff > 0) diff--; else diff++;
			} while(true);
		break;
		
		// add just one row to selection, erase all previous one
		default: 
			var exists = selected_row[rowIndex];
			selected_row = {};
			if(!exists) selected_row[rowIndex] = t; 
	}
}



Некрасивое место на case 16:
...
Рейтинг: 0 / 0
Последний добавленный элемент в объекте
    #38347939
deblogger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хосподи, где тут кнопка редактирования, зафигачил с матами в комментах... :) Заколебал меня сегодня этот массивообъект.
...
Рейтинг: 0 / 0
Последний добавленный элемент в объекте
    #38347966
Фотография Паганель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
debloggerЗначение значения не имеет, важно само существование объекта. Что позволяет напрямую проверить был такой индекс уже, или не было еще:

if(obj[newIndex]) {}
никак не пойму почему все так делают
http://jsfiddle.net/qaCkt/
...
Рейтинг: 0 / 0
Последний добавленный элемент в объекте
    #38348008
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Паганель
debloggerЗначение значения не имеет, важно само существование объекта. Что позволяет напрямую проверить был такой индекс уже, или не было еще:

if(obj[newIndex]) {}
никак не пойму почему все так делают
http://jsfiddle.net/qaCkt/ А почему 0 does not exist? 0 существует и равен false.
...
Рейтинг: 0 / 0
Последний добавленный элемент в объекте
    #38348134
Фотография Паганель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyА почему 0 does not exist? 0 существует и равен false.вот и я о том же
...
Рейтинг: 0 / 0
Последний добавленный элемент в объекте
    #38348162
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Паганель
debloggerЗначение значения не имеет, важно само существование объекта. Что позволяет напрямую проверить был такой индекс уже, или не было еще:

if(obj[newIndex]) {}
никак не пойму почему все так делают
http://jsfiddle.net/qaCkt/

Потому что индекс не может быть равен нулю (я имею ввиду в данном случае). Нафига воротить сложные проверки, если можно просто проверить индекс на ноль (0, false, undefined, "" и т.д.)? :)
...
Рейтинг: 0 / 0
Последний добавленный элемент в объекте
    #38348165
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПрограмёрПаганель
пропущено...
никак не пойму почему все так делают
http://jsfiddle.net/qaCkt/


Потому что индекс не может быть равен нулю (я имею ввиду в данном случае). Нафига воротить сложные проверки, если можно просто проверить индекс на ноль (0, false, undefined, "" и т.д.)? :)

ай блин )) Неправильно сказал. Тут вообще другое. Автор любому элементу присваивает значение 1... а значит проверка на if(obj[newIndex]) всегда будет давать true в случае существования элемента и false - если таковой создан не был. Вот так :)
...
Рейтинг: 0 / 0
Последний добавленный элемент в объекте
    #38348172
Фотография Паганель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПрограмёрАвтор любому элементу присваивает значение 1debloggerЗначение значения не имеет
...
Рейтинг: 0 / 0
Последний добавленный элемент в объекте
    #38348523
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПаганельПрограмёрАвтор любому элементу присваивает значение 1debloggerЗначение значения не имеет

Так, представим пример... Вам сервер (по какой-либо причине) отдаёт список записей id из таблицы. Как бы Вы это всё сохраняли, зная, что вся работа с этим списком ограничится (в данной части приложения) проверками на существование некоторой записи в таблице?

Я бы сохранил (собственно уже не раз так делал) этот список как json массив, где ключ - id записи, а значение для всех выставил бы в 1 или true (по настроению ).

В этом случае, для меня тоже "значение значения не имеет", так как мне важен только ключ. Но никто не отменял факт, что у всех элементов значение 1 (true) :)
...
Рейтинг: 0 / 0
Последний добавленный элемент в объекте
    #38348551
Фотография Паганель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну конечно не имеет. лишь бы не false
...
Рейтинг: 0 / 0
Последний добавленный элемент в объекте
    #38349031
deblogger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Паганель,

Ну да, значение имеет не 0, всё остальное отличное от 0 значение не имеет. Так надо было сформулировать.

Кстати, на php $arr = Array(); $arr[50000] = 1; дает sizeof($arr) == 1, а не 50001 как на явескрипте. Отсталый езыг, понимаешь, этот js. :)
...
Рейтинг: 0 / 0
Последний добавленный элемент в объекте
    #38349045
deblogger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Метод проверки exist - exists. http://stackoverflow.com/questions/1098040/checking-if-an-associative-array-key-exists-in-javascript

А "все так делают" потому что так халявнее.
...
Рейтинг: 0 / 0
Последний добавленный элемент в объекте
    #38349052
Фотография Яростный Меч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
debloggerКстати, на php $arr = Array(); $arr[50000] = 1; дает sizeof($arr) == 1, а не 50001 как на явескрипте. Отсталый езыг, понимаешь, этот js. :)массив (по определению) - это набор элементов, имеющих последовательно расположенные индексы.
все остальное - "карта", "словарь", "хэштаблица" и т.д.
так что в данном примере пхп явно неправ, если в нем массив ведет себя как непонятно что.
...
Рейтинг: 0 / 0
Последний добавленный элемент в объекте
    #38349139
deblogger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Яростный Меч,

Вполне понятно что если захотеть сделать так, чтобы в ячейке памяти 2, 30035 и 50001 хранились 1 отождествляющие некие сущности, то придется занять память со смещением Х от 2 до 50001 и поручить кому-то добавлять и вычитать смещение. Поэтому массив не может разрываться, поскольку изначально это тупо область памяти по адресу А со смещением С, на длину Л слов. Ну а кого сейчас волнует как оно на низком уровне. Я ж не пишу на ассемблере для веба. Это пусть Си выделяет, закрывает, контролирует, итерирует и все такое.

php в отличии от явы не изображает "настоящий" массив. Как записали - так и выдает, оперируя внутренне. За каким чертом ява корчит из себя настоящий езыг - это непонятно.
...
Рейтинг: 0 / 0
Последний добавленный элемент в объекте
    #38349154
deblogger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Яростный МечdebloggerКстати, на php $arr = Array(); $arr[50000] = 1; дает sizeof($arr) == 1, а не 50001 как на явескрипте. Отсталый езыг, понимаешь, этот js. :)массив (по определению) - это набор элементов, имеющих последовательно расположенные индексы.


Вы верите что если я напишу var arr = new Array(20); то мне выделят область памяти в 20 слов на хранение 20 указателей?

И конечно arr[50000]=1 ничего такого не выделяет. Но изображая правильный язык js заполняет пустые индексы неопределенностью при попытке получить ссылку на массив в целом.
...
Рейтинг: 0 / 0
Последний добавленный элемент в объекте
    #38349265
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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, то как-раз несколько метров памяти и выделится. Хотя не уверен... Все эти автоматические приведения типов, сборщики мусора и тому подобное... Сколько уже пишу на этих скриптах, никак в их суть вникнуть не могу что и как работает.
...
Рейтинг: 0 / 0
Последний добавленный элемент в объекте
    #38349312
Фотография Яростный Меч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПрограмёрПо поводу выделения памяти в js не уверен, но думаю что если arr=[]; arr[1000000]=true, то как-раз несколько метров памяти и выделится. Хотя не уверен... Все эти автоматические приведения типов, сборщики мусора и тому подобное... Сколько уже пишу на этих скриптах, никак в их суть вникнуть не могу что и как работает.это детали реализации, они могут быть разными в разных движках, так что тут нельзя ничего сказать наверняка.

Но так уж устаканилось, что если в массиве есть элемент с индексом 10, то должны быть и элементы с индексами до 10. Хотя бы виртуально.
...
Рейтинг: 0 / 0
Последний добавленный элемент в объекте
    #38350676
deblogger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Господа, вы о чем пишите? Массив делается вот так: "массив делается вот так" или вот так https://en.wikipedia.org/wiki/C_dynamic_memory_allocation

Отсюда вопрос. Как вы измерите длину массива? Ну то есть перед вами 1000 байт в которые можно записать что угодно. Может быть по 0? Но данные могут содержать 0. Следовательно придется завести небольшую БД где оперативно по событиям отмечать место начала массива и его протяженность в некоторых единицах измерения, скажем в машинных словах. Дальше еще хуже. В массив можно записать такие данные, которые на самом деле адрес другого массива и так далее. Возникает система управления массивами - выделенной памятью. От всего этого пользователи языков высокого уровня избавлены. Чем выше уровень тем выше уровень абстракции. Насколько я понимаю массивы в яве и пхп это просто коллекции записей, да, создав массив вы создаете небольшую БД. Именно ради этого и затевался

ПрограмёрКстати, если брать php массивы, то это то же самое, что и json в js.

чтобы эти небольшие БД оперативненько передавать по проводам как текст.

Но я хотел вас огорчить, первый же пример в википедии насчет жейсона может быть в точности воспроизведен на xml, которому, если вы не в курсе, уже более 30 лет, а методу сериализации объедков - всего 11.

Отсюда вопрос. А что мешало превращать объекты в xml и поддержать это в компиляторе?
...
Рейтинг: 0 / 0
Последний добавленный элемент в объекте
    #38350695
deblogger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Конечно, вот я сохранил настройки скрипта на диске.

Код: javascript
1.
({name:"Ellipse", shape:0, units:"cm", skew:0, radius:[0, 0, 0, 0], smooth:[true, true, true, true]})



Прямо из 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>

Найдите два отличия.
...
Рейтинг: 0 / 0
Последний добавленный элемент в объекте
    #38350697
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
debloggerПрограмёрКстати, если брать php массивы, то это то же самое, что и json в js.

чтобы эти небольшие БД оперативненько передавать по проводам как текст.

Но я хотел вас огорчить, первый же пример в википедии насчет жейсона может быть в точности воспроизведен на xml, которому, если вы не в курсе, уже более 30 лет, а методу сериализации объедков - всего 11.

Отсюда вопрос. А что мешало превращать объекты в xml и поддержать это в компиляторе?

Я привёл аналогию. Разумеется не то же самое... Не знаю просто как правильно выразить. наверное "php массивы в приближении соответствуют json в js".
А вот по поводу "что мешало"... Я уж не знаю, но логически предполагаю, что были проблемы в бинарными данными. Но если не прав - просветите пожалуйста :).
...
Рейтинг: 0 / 0
Последний добавленный элемент в объекте
    #38350714
Фотография Яростный Меч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
debloggerНайдите два отличия.1) объем данных
2) в хмл все значения - строки, никак не определить, что в <shape>0</shape> число. Понятно, в скрипте это бы разрулилось, но только приведением типов вручную. А так - уже готовый объект.

К тому же непонятно, как в xml записывать массивы. в любом случае придется придумывать какие-то соглашения.
В общем, xml можно легко спарсить в DOM, но однозначно собрать по нему js-ный объект в общем случае нельзя.
...
Рейтинг: 0 / 0
Последний добавленный элемент в объекте
    #38350740
deblogger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как будто на яс есть типы данных без отношений.

Про двоичные не надо грязи. Почту отправляете? Ну так посмотрите как выглядит письмо с фоткой внутри изнутри, а не снаружи. В xml все валится точно так же, как в яву. Любые ресурсы. Сохраните вордовский док с картинками в хмеле и убедитесь.

Тем не менее если нужен тип данных так и напишите

<width>
<type>INT</type>
10
<width>

У меня ж в примере есть сведения о единицах измерения - cm - то же самое. xml не запрещает абсолютно ничего из того, что можно описать в xml.
...
Рейтинг: 0 / 0
Последний добавленный элемент в объекте
    #38350742
deblogger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Отношения в ясе это все. Пока я складывал высоту и ширину все было нормально, как только захотел умножить выяснилось что оперирую объектами. Недаром же в правильных скриптах повсюду торчат typeof и parseInt.
...
Рейтинг: 0 / 0
25 сообщений из 27, страница 1 из 2
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Последний добавленный элемент в объекте
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]