3

我通常使用数组来完成可能更适合使用对象的任务。我决定在 Stack Overflow 上提出这个问题,而不是继续怀疑将对象用于任务是否会更好。

array = ["James", 17];
object = {name:"James", age:17};

它们在语法上看起来都很相似,对我来说,它们在使用时似乎达到了同样的效果。我什么时候应该在数组上使用对象,反之亦然?是否有关于何时应该使用另一种的一般规则?

4

3 回答 3

8

当您想要命名键(键:值对)时使用对象,否则使用数组。您甚至可以对对象使用数组表示法:

object = {name:"James", age:17};
object['name'];    // James

在您的情况下,您似乎将信息存储在有关一个人的字段中。在这里,使用对象非常有意义,因为键标识了您在每个字段中存储的数据类型。数组用于简单的数据列表。

于 2013-07-29T14:43:16.383 回答
3

在使用数组的第一个示例中,您正在该数组中的两个索引之间建立关系。不鼓励这样做,因为您的代码不具备您打算将一个与另一个相关联的固有知识。这是在第二行中使用对象的绝佳机会。

考虑同时使用它们的机会:

var match = {};

var peopleProps = {
    hair: ['brown', 'blonde', 'red'],
    eyes: ['brown', 'blue', 'green']
};

var person = {
   name: 'James',
   age: '17',
   hair: 'brown',
   eyes: 'blue'
};


for(var prop in person) {
    for(var subProp in peopleProps) {
      for(var i=0, l=peopleProps[subProp].length; i<l; i++) {
        if(prop == subProp && person[prop] === peopleProps[subProp][i]) {
          (match[prop][subProp])? match[prop][subProp]++ : match[prop][subProp] = 1;
        }
      }
    }
}

在这里,我们可以看到使用数组创建映射项和对象来关联它们的用处。

于 2013-07-29T14:47:30.577 回答
2

重点是:抽象级别。您将希望按照“现实生活”中的方式对数据进行建模。数组是项目的列表,对象是项目。

于 2013-07-29T14:53:33.257 回答