Javascript массив с пользовательскими свойствами - PullRequest
2 голосов
/ 14 июня 2011

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

Кто-нибудь может вспомнить какие-либо воспоминания / последствия для этой техники? Я уже сталкиваюсь с незначительными проблемами, такими как:

  • Qunit не может проверить свойство в массиве, так как ожидает тип массива,
  • jQuery extension не будет копировать ключевое свойство при копировании массива.

Кроме этого, это кажется наилучшим способом индексирования массива при сохранении его порядка.

var keyArray = function(arrayToKey,property){
        if (typeof arrayToKey !== 'undefined') {
            arrayToKey.key = {};
            var l = arrayToKey.length,
                i = 0;
            if (typeof property !== 'undefined') {
                for (i = 0; i < l; i++) {
                    if (arrayToKey[i] !== null) {
                        arrayToKey.key[arrayToKey[i][property]] = arrayToKey[i];
                    }
                }
            } else {
                for (i = 0; i < l; i++) {
                    if (arrayToKey[i] !== null) {
                        arrayToKey.key[arrayToKey[i]] = true;
                    }
                }
            }
        } else {
            return null;
        }
    };

Это принимает массив и либо: вводит его в ключ для содержимого каждого элемента массива, либо, если ему передается имя свойства, указывает его в свойстве каждого объекта в массиве, например,

Example 1:
keyArray(['hello','nice','world']);
-> 
['hello',' ','world'].key{
    hello: true,
    nice, true,
    world, true
};
Example 2:
keyArray([
    {
        name: 'hello',
        value: 'hello value'
    },
    {
        name: 'nice',
        value: '  value'
    },
    {
        name: 'world',
        value: 'world value'
    }
]);
->
[
    {
        name: 'hello',
        value: 'hello value'
    },
    {
        name: 'nice',
        value: '  value'
    },
    {
        name: 'world',
        value: 'world value'
    }
].key{
    hello: {
        name: 'hello',
        value: 'hello value'
    },
    nice: {
        name: 'nice',
        value: 'nice value'
    },
    world: {
        name: 'world',
        value: 'world value'
    }
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...