何时在JavaScript对象中使用数组(或混合它们)?

时间:2014-09-12 04:59:16

标签: javascript arrays object

我经常看到这样的数据结构:

var settings = {
    languages: [
        {
            language: 'English',
            translation: 'English',
            langCode: 'en',
            flagCode: 'us'
        },
        {
            ...
        }
    ]
};

或者这个:

var settings = {
    languages: [
        {
            'en' : {
                language: 'English',
                translation: 'English',
                flagCode: 'us'
            }
        },
        {
            ...
        }
    ]
};

这可以深入很多层次(在一个对象中通常有其他数组包含更多对象)......

如果我们不知道它在数组中的位置,那么当数组必须循环查找某个对象时,添加数组会带来另一层复杂性。但即使知道它的位置,使用它仍然比使用纯粹嵌套的对象更复杂,使用点符号可以很容易地引用所有内容。就像在这种情况下:

var settings = {
    languages: {
        'en' : {
            language: 'English',
            translation: 'English',
            flagCode: 'us'
        },
        'de' : {
            ...
        }
    }
};

那么什么时候在对象中使用数组,何时不使用数组?

3 个答案:

答案 0 :(得分:2)

我的简单回答

  • 当您需要{...}对的集合时使用对象(key:value

  • 当您需要一组对象时使用数组([...]

其他差异

  • 数组是有序的,对象不是

  • 数组会自动使用数字编制索引,对象要求您指定索引

  • 数组具有.length属性,对象不具有<​​/ p>

答案 1 :(得分:0)

这样做可能有多种原因。其中一个是, 当你需要特定顺序的对象时,数组在这里很有帮助。即在你的第一个例子中

var settings = {
    languages:
        {
            language: 'English',
            translation: 'English',
            langCode: 'en',
            flagCode: 'us'
        },
        {
            ...
        }
};

内部对象可能会改变它的位置,当它在一个数组中时,它只会驻留在它的索引处。

答案 2 :(得分:0)

如果不是数组,您希望数据结构如何保存事物列表?

假设您有一个描述Person的对象,您如何抓住这些人Children

var kid1 = 
{
   FirstName: "Abc",
   LastName: "Def",
   Children: null
};

var kid2 = 
{
   FirstName: "Abc",
   LastName: "Def",
   Children: null
};

var dad = 
{
   FirstName: "Abc",
   LastName: "Def",
   Children: [kid1,kid2]
};

Children must be an array since a person can have more than one child.