繁体   English   中英

如何创建动态设置属性名称的嵌套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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM