我有一个javascript回调函数,它使用一组参数查询我的数据库。使用对象设置参数。如何动态设置其中一个属性的名称?
现在我把它们都写完了。它工作正常,只是有点长。我只需要更改两个属性名称的值。其中propertyNameToChange在我的示例代码中。
var paramToChange = { /* I need to change the name of this property */
propertyNameToChange: { /* And the name of this property */
url: {
ComparisonOperator: 'EQ',
AttributeValueList: [{
S: alreadySetWithVar /* This is already set using a var */
}]
}
},
TableName: 'ximoRep',
IndexName: 'url-index'
}
.... // I have about 10 of these written out. Then my callback function queries using an array using the var name for the object.
var params = [paramOne, paramTwo, paramThree, paramFour, paramFive, paramSix, paramSeven, paramEight];
答案 0 :(得分:2)
Javascript没有更改属性名称的方法。您可以做的是将一个属性分配给另一个新属性名称,然后删除原始属性。
如果您有这种数据结构:
var data = {
prop1: {greeting: "hello"}
};
并且,您想要将prop1
更改为otherProp
,您可以这样做:
data.otherProp = data.prop1;
delete data.prop1;
这会将原始属性的值分配给新属性,然后删除原始属性。
最终结果是:
var data = {
otherProp: {greeting: "hello"}
};
执行此操作的通用函数甚至可以使用具有特殊特性(如getter,setter或其他自定义属性)的propeties,它将使用如下的propertyDescriptor:
function renameProp(obj, oldPropName, newPropName) {
var descriptor = Object.getOwnPropertyDescriptor(obj, oldPropName);
Object.defineProperty(obj, newPropName, descriptor);
delete obj.oldPropName;
}
这假设oldPropName
属性是可配置的,并且对象未被冻结。
答案 1 :(得分:2)
paramToChange['newPropName'] = paramToChange['propertyNameToChange'];
delete paramToChange['propertyNameToChange'];
固定。