2011-01-25 71 views
0

我有一个看起来像这样的对象。关联数组元素与对象字段相同吗?

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); 

这工作不错,但我想知道如果这是正确的做法。有没有更简单的方法,或者我想要实现的更优雅的方式?这种创建对象的方式是否存在任何(安全或技术)问题/问题?

而且从标题的问题:是新创建的对象实际上属性的关联数组作为键(因为它创建的方式)或是否有任何区别。

+0

在JS中没有像关联数组这样的东西。 – kapa 2011-01-25 10:12:27

回答

3

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

写一个更合适的方式将申报对象newObj = {},然后就抄你需要的属性。

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

除此之外,它是唯一的方法这很好。

+0

是的,我知道参考作业。感谢您的意见。这就是我需要的。 – 2011-01-25 12:03:22