Создание объекта с уникальными идентификаторами - PullRequest
4 голосов
/ 09 октября 2010

Я хочу создать объект с уникальными идентификаторами.Чтобы лучше объяснить, вот пример:

var obj = new Object({
    'a': {
        'someVariable': 'heh',
        'someOtherVariable': 'Stuff'
    },
    'c': {
        'someVariable': 'heh',
        'someOtherVariable': 'Stuff'
    }
});

Дело в том, что объект будет широко использоваться / передаваться, добавляя и удаляя элементы, но каждый «идентификатор» элемента должен быть уникальным ...объект может содержать 0 предметов в одной точке или 700 в другой.Я чувствовал, что проще всего было бы иметь число в качестве идентификатора для каждого объекта (вместо a или c) и перечислять по Object.keys(obj), находя наибольшее число.К сожалению, не похоже, что вы можете использовать число, так как, когда я пытаюсь получить доступ к obj.0, я получаю сообщение об ошибке.

В идеале я хотел бы, чтобы идентификатор был:

  • С номером было бы проще работать, хотя в случае невозможности он не нужен на 100%.
  • Когда объект удален, информация, которую он хранит, будет вставлена ​​в базу данных для целей отслеживания, поэтомужизненно важно, чтобы идентификатор объекта оставался уникальным, даже если этот идентификатор больше не находится в объекте.Вот почему я думал, что числа будут лучше, поскольку вы можете просто добавить +1 к каждому элементу.

Кто-нибудь знает, как это сделать?

Редактировать для уточнения

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

Ответы [ 3 ]

3 голосов
/ 09 октября 2010

obj.0 является синтаксической ошибкой, поскольку идентификаторы не могут начинаться с цифры, но вы можете сделать obj[0] (что делает то же самое):

 var obj = {};
 obj[0] = 'test';
 alert(obj[0]);
2 голосов
/ 09 октября 2010

Вы можете использовать массив:

var obj = [];
obj.push( {'someVariable': 'heh','someOtherVariable': 'Stuff'});
obj.push( {'someVariable': 'heh2','someOtherVariable': 'Stuff2'});

// now obj.length == 2;
// access heh w/ obj[0]["someVariable"] or obj[0].someVariable 

или вы можете использовать пронумерованные имена свойств и свойство length, чтобы отслеживать, сколько их существует для "подобного массиву" объекта:

var i = 0, obj ={}; 
obj.length = 0;

obj[i++] = {'someVariable': 'heh','someOtherVariable': 'Stuff'};
obj.length = i; 

obj[i++] = {'someVariable': 'heh2','someOtherVariable': 'Stuff2'};
obj.length = i; 

// now obj.length == 2
// access heh w/ obj[0]["someVariable"] or obj[0].someVariable 
2 голосов
/ 09 октября 2010

Если идентификаторы должны быть уникальными только в DOM данной страницы, вы можете просто использовать счетчик, который постоянно увеличивается.

Однако кажется, что вам необходимо иметь глобально уникальный идентификатор для всех перезагрузок страницы и одновременного доступа к нескольким браузерам.В этом случае вам нужно сгенерировать id на стороне сервера или использовать UUID .

Или, может быть, я неправильно понимаю вещи, и вы можете просто использовать массив?Нажмите на массив, чтобы добавить новые объекты и обнулить их (не смещая элементы вокруг), когда вы хотите удалить их.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...