如何创建嵌套的javascript对象动态设置属性名称

时间:2015-08-24 04:46:06

标签: javascript arrays object

我有一个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]; 

2 个答案:

答案 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'];

固定。