Сначала мой заголовок может быть не очень хорошим, поэтому я с удовольствием обновляю его с любыми предложениями.
Поэтому я хотел реализовать 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));
}
Поэтому любой вклад будет оценен
Вы можете переделать свою функцию, чтобы добавить новый параметр "attr":
function (prod_sku, attr)
{
Page.getAttribute(UpdateFieldName).setValue(prod_sku[attr]);
}
prod_sku["ProductName"]
.