在另一个对象中替换对象的名称

时间:2013-07-28 09:06:29

标签: javascript jquery

我有一个对象作为参数传递给jquery验证器插件:

var  param = {rules: {
        name: {
            required: true
        },
        tel: {
            required: true,
            number: true
        }
       }
     };

我有三个具有相似字段的表单,但它们的名称如'xxx[name]''xxx[tel]'等。我需要编写一个函数来替换param对象中的对象名称,但由于某种原因,我对如何做到这一点感到困惑。我试过了:

function insertParam(par1) {
     var  param = {rules: {
        name: {
            required: true
        },
        tel: {
            required: true,
            number: true
        }
       }
     };

 param['rules']['name'] = param['rules'][par1 + '[name]'];
 param['rules']['tel'] = param['rules'][par1 + '[tel]'];

 return param;
 };

但这不起作用。那么,这怎么做得恰到好处?我们将不胜感激。

编辑:小提琴http://jsfiddle.net/qzgaS/

1 个答案:

答案 0 :(得分:0)

您混合了分配顺序和符号。

由于您在属性名称中使用了某些“特殊”(例如[)字符,因此应使用括号表示法。

否则,对于常量属性,请使用

foo.bar

而不是

foo['bar']

为了更好的可读性。

您想从模板生成参数对象。这可以通过构造具有所需属性的对象并将模板的值分配给它们来完成,如下所示:

function insertParam(par1) {
     var  rules = {
        name: {
            required: true
        },
        tel: {
            required: true,
            number: true
        }
    };

    var result = {"rules":{}};
    result.rules[par1 + '[name]'] = rules.name;
    result.rules[par1 + '[tel]'] = rules.tel;

    return result;
};

调用时会产生所需的输出:

>>> insertParam('Call')

{
    "rules": {
        "Call[name]": {
            "required": true
        },
        "Call[tel]": {
            "required": true,
            "number": true
        }
    }
}

Demo