Я начал использовать технику для индексации массивов, добавив ключевое свойство к массиву. Это полезно, если вы хотите сохранить порядок массива, но также выполнить быстрый поиск по нему (особенно при получении наборов данных из 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'
}
};