关联数组元素是否与对象字段相同?

时间:2011-01-25 09:59:36

标签: javascript json associative-array

我有一个看起来像这样的对象。

var obj = {
    speed: 10,
    volume: 14,
    aux_deform: 1.8,
    energy: 21.5,
    aux_energy: 0.2
}

在运行时会添加其他字段/属性,因此对象可以在任何给定时间包含任意数量的属性。正如您在我的对象示例中所看到的,某些属性可以以“aux _”开头。

现在,我想从这个创建另一个对象,它只包含以“aux _”开头的属性。

我现在这样做的方式是这样的。

var newObj = [];
for(prop in obj)
{
    if (prop.startsWith('aux_'))
    {
        newObj[prop] = obj[prop];
    }
}

现在我有一个新对象,我可以做类似的事情:

alert(newObj.aux_energy);

这可以,但我想知道这是否是正确的方法。对于我想要达到的目标,有没有更简单的方法,或更优雅的方式?这种创建对象的方式是否存在(安全或技术)问题?

标题中的问题是:新创建的对象实际上是一个关联数组,其属性为键(因为它是以这种方式创建的),或者是否存在差异。

1 个答案:

答案 0 :(得分:3)

Java Script中没有关联数组,只有JSON对象可以用来代替关联数组。你在这里做的是你已经声明了一个名为newObj的数组,然后向这个数组添加了属性。当尝试在Array方法中使用buit或迭代它时,它可能会导致意外的行为。 JSON对象和数组之间的主要区别在于对象中的属性不可排序,迭代它们会产生随机和不可预测的输出。

更合适的编写方式是声明对象newObj = {},然后只复制所需的属性。

有一点需要注意 - 如果您将数组或对象作为属性的值,则将复制对这些对象的引用。如果您希望能够独立于原始对象编辑这些值,则必须对这些值进行深层复制 - 请查看此问题,了解如何在What is the most efficient way to deep clone an object in JavaScript?

除此之外,它是唯一的方法,它完全没问题。