像对象一样的数组

时间:2015-09-24 20:45:50

标签: javascript

我想知道这个目标代码是否正确用于让group1模拟一个数组?我会避免使用数组来避免错误。

var group1={}
group1[0]={}
group1[0].fruits="Apple"
group1[0].qtystock1="1"
group1[1]={}
group1[1].fruits="Durian"
group1[1].qtystock4="2"
group1[2]={}
group1[2].fruits="Orange"
group1[2].qtystock1="3"
console.log(group1[0].qtystock4) //Should give "undefined"

2 个答案:

答案 0 :(得分:2)

这是对的,是的。是否正确要完成的事情完全取决于您将使用group1做什么。例如,如果您想使用length属性数组,那么您就不希望这样做,因为它不会有length

一般来说,如果您要使用类似数组的东西,请使用数组;如果您要将其用作非数组对象,请使用对象。但是在JavaScript中,标准数组只是具有一些特殊行为的对象(details on my anemic little blog),因此如果需要,可以使用这样的对象。

FWIW,这是其中的数组版本:

var group1 = [
    {fruits: "Apple", qtystock1: "1"},
    {fruits: "Durian", qtystock4: "2"},
    {fruits: "Orange", qtystock1: "3"}
];
console.log(group1[0].qtystock4); //Should give "undefined"

您已经拥有的对象的更简洁版本:

var group1 = {
    0: {fruits: "Apple", qtystock1: "1"},
    1: {fruits: "Durian", qtystock4: "2"},
    2: {fruits: "Orange", qtystock1: "3"}
};
console.log(group1[0].qtystock4); //Should give "undefined"

对于引用的数据,我可能会使用数组。我也可能会为qtystock1 / qtystock4使用一致的属性名称,但是当你拥有更大的上下文时,它可能是有意义的。

答案 1 :(得分:1)

这是合法的Javascript,我发现您的代码中没有错误。如果为对象分配一个这样的数字属性,则该数字将转换为字符串(Javascript中的所有属性名称都是字符串),最终将使用以下属性:

group1["0"]

由Javsacript解释为:

group1[0]

为了清晰代码,使用数组可能更有意义,因为它会自动为您保留.length属性,您可以在其上使用数组函数,如{ {1}}和其他迭代器。您仍然可以在数组对象上拥有类似.forEach()的属性,因为它也是一个对象。

因此,数组是对象的所有内容,并且它添加了数组功能。因此,如果您使用的是基于零的项目序列,那么通常使用数组而不是普通对象来获得清晰度和功能,并且不会丢失任何内容。

至于你的代码行:

.fruits

将显示console.log(group1[0].qtystock4) ,因为undefined是一个没有group1[0]属性的对象,因此如果您阅读它,JS将返回.qtystock4