Перевести имя строки в объект с тем же именем

0

Сначала мой заголовок может быть не очень хорошим, поэтому я с удовольствием обновляю его с любыми предложениями.

Поэтому я хотел реализовать DRY на каком-то javascript-коде. По сути, было три функции (еще впереди), которые были точно такими же, за исключением одной части одной строки. Поэтому я думал о том, чтобы его модуляция, а в цикле - одна строка.

Таким образом, строка кода ДО каких-либо изменений выглядела бы так в трех разных функциях:

...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, таких как ниже, но... kinda, казалось, победил главную цель... уверен, что это уменьшает много повторяющегося кода, но я надеялся на чистое решение.

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

Поэтому любой вклад будет оценен

  • 3
    Вы можете использовать скобочные обозначения, то есть prod_sku["ProductName"] .
  • 0
    Проверьте docs.python.org/2.7/library/functions.html#eval
Теги:

1 ответ

1
Лучший ответ

Вы можете переделать свою функцию, чтобы добавить новый параметр "attr":

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню