具有自定义属性的Javascript数组

时间:2011-06-14 13:39:48

标签: javascript arrays object indexing properties

我已经开始使用techique通过向数组添加键属性来索引数组。如果您希望保留数组的顺序,并对其进行快速查找(尤其是从JSON获取数据集时),这非常有用。各个键属性的优点是它们是对数组中保存在内存中的原始项的引用。

有人能想到这种技术的任何记忆/影响吗?我已经遇到了一些小问题,例如:

  • Qunit无法测试数组上的属性,因为它需要数组类型
  • jQuery extend在复制arrray时不会复制key属性。

除此之外,这似乎是在维护数组时对数组进行索引的最好方法。

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'
    }
};

0 个答案:

没有答案