通过相同名称将字符串名称转换为对象

时间:2014-03-31 15:15:52

标签: javascript jquery

首先我的头衔可能不是很好,所以我很乐意用任何建议更新它。

所以我的愿望是在一些javascript代码上实现DRY。从本质上讲,除了一行的一部分之外,还有三个函数(更多来的)完全相同。所以我的想法就是将它模块化,并在一个循环中执行一行。

因此,任何更改之前的代码行在三个不同的函数中看起来都是这样的:

...snip
function (prod_sku)
        {
            Page.getAttribute(UpdateFieldName).setValue(prod_sku.ProductName));
        },


...snip 2
function (prod_sku)
        {
            Page.getAttribute(UpdateFieldName).setValue(prod_sku.ProductSKU));
        },

...snip 3
function (prod_sku)
        {
            Page.getAttribute(UpdateFieldName).setValue(prod_sku.ProductQty));
        },

因此,您可以看到唯一的差异是ProductName,ProductSKU,ProductQty。

所以我的想法是有一个调用,其中要更新的字段被传递,然后分成一个数组。

passed in as 'ProductName,ProductSKU,ProductQty,...' (UpdateFieldValue is the parm variable)

split into an array as var arrayUpFldVal = UpdateFieldValue.split(',');

然后遍历执行一行的数组,并连接数组val。

function (prod_sku)
        {
            Page.getAttribute(UpdateFieldName).setValue(prod_sku +'.' + arrayUpFldVal [index]));
        },

只有你可能预测到它才会将对象转换为字符串表示以便能够连接。

[object Object].ProductNumber

那么如何获取我的字符串名称来表示一个对象...即。 prod_sku.ProductName

我可以做一系列if语句,但是......有点似乎打败了主要目标......确保它减少了很多重复的代码,但我希望有一个干净的解决方案。

if(arrayUpFldVal == 'ProductName')
{
  Page.getAttribute(UpdateFieldName).setValue(prod_sku.ProductName));
}

所以任何输入都会受到赞赏

1 个答案:

答案 0 :(得分:1)

你可以修改你的功能以包含一个新的" attr"参数:

function (prod_sku, attr)
        {
            Page.getAttribute(UpdateFieldName).setValue(prod_sku[attr]);
        }