我有一个看起来像这样的对象。
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 :(得分:3)
Java Script中没有关联数组,只有JSON对象可以用来代替关联数组。你在这里做的是你已经声明了一个名为newObj的数组,然后向这个数组添加了属性。当尝试在Array方法中使用buit或迭代它时,它可能会导致意外的行为。 JSON对象和数组之间的主要区别在于对象中的属性不可排序,迭代它们会产生随机和不可预测的输出。
更合适的编写方式是声明对象newObj = {}
,然后只复制所需的属性。
有一点需要注意 - 如果您将数组或对象作为属性的值,则将复制对这些对象的引用。如果您希望能够独立于原始对象编辑这些值,则必须对这些值进行深层复制 - 请查看此问题,了解如何在What is the most efficient way to deep clone an object in JavaScript?上
除此之外,它是唯一的方法,它完全没问题。