[英]How do I dynamically get the value of a nested object property in JavaScript?
[英]How do I create a nested javascript object setting the property names dynamically
我有一个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];
Javascript无法更改属性名称。 您可以做的是将一个属性分配给另一个新的属性名称,然后删除原始属性。
如果您具有以下数据结构:
var data = {
prop1: {greeting: "hello"}
};
并且,您想将prop1
更改为otherProp
,您可以这样操作:
data.otherProp = data.prop1;
delete data.prop1;
这会将原始属性的值分配给新属性,然后删除原始属性。
最终结果是:
var data = {
otherProp: {greeting: "hello"}
};
这样做的通用函数甚至可以与具有特殊特征的属性(例如,getter,setter或其他自定义属性)一起使用,可以使用如下的propertyDescriptor:
function renameProp(obj, oldPropName, newPropName) {
var descriptor = Object.getOwnPropertyDescriptor(obj, oldPropName);
Object.defineProperty(obj, newPropName, descriptor);
delete obj.oldPropName;
}
假定oldPropName
属性是可配置的,并且对象未冻结。
paramToChange['newPropName'] = paramToChange['propertyNameToChange'];
delete paramToChange['propertyNameToChange'];
固定。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.