目前我有3个非常相似的功能。它们仅区分输入参数名称,条件和返回值。我要重构它们,我想你们可能会告诉我你认为重构这些的最佳方法是什么。感觉像必须有1个函数,但名称可以理解,条件应作为函数传递给参数或类似的东西。
function getFieldName(fieldName) {
var dataSet = getDataSet();
var dataFields = dataSet.DataFields;
for (var i = 0; i < dataFields.length; i++) {
if (dataFields[i].FieldName.toLowerCase() === fieldName.toLowerCase()) {
return dataFields[i].FieldName;
}
}
return null;
};
function getFieldNameByDisplayName(displayName) {
var dataSet = getDataSet();
var dataFields = dataSet.DataFields;
for (var i = 0; i < dataFields.length; i++) {
if (dataFields[i].DisplayName.toLowerCase() === displayName.toLowerCase()) {
return dataFields[i].FieldName;
}
}
return null;
};
function getDisplayNameByFieldName(fieldName) {
var dataSet = getDataSet();
var dataFields = dataSet.DataFields;
for (var i = 0; i < dataFields.length; i++) {
if (dataFields[i].FieldName.toLowerCase() === fieldName.toLowerCase()) {
return dataFields[i].DisplayName;
}
}
return null;
};
你怎么看?谢谢。
====================================
更新:可能是这样的:
function getFieldName(fieldName, compareFieldProperty, returnFieldProperty) {
var dataSet = getDataSet();
var dataFields = dataSet.DataFields;
for (var i = 0; i < dataFields.length; i++) {
if (dataFields[i][compareFieldProperty].toLowerCase() === fieldName.toLowerCase()) {
return dataFields[i][returnFieldProperty];
}
}
return null;
};
答案 0 :(得分:1)
这样的东西?
function getFieldName(type, name) {
var dataSet = getDataSet();
var dataFields = dataSet.DataFields;
for (var i = 0; i < dataFields.length; i++) {
if (dataFields[i][type].toLowerCase() === name.toLowerCase()) {
return dataFields[i][type];
}
}
return null;
};
答案 1 :(得分:1)
好吧,您可以使用dynamic property accessor并将属性名称作为参数传递:
function getAbyB(a, b, bvalue) {
var dataFields = getDataSet().DataFields;
for (var i = 0; i < dataFields.length; i++) {
if (dataFields[i][b].toLowerCase() === bvalue.toLowerCase()) {
return dataFields[i][a];
}
}
return null;
};
function getFieldName(fieldName) {
return getAbyB("FieldName", "FieldName", fieldName);
}
function getFieldNameByDisplayName(displayName) {
return getAbyB("FieldName", "DisplayName", displayName);
}
function getDisplayNameByFieldName(fieldName) {
return getAbyB("DisplayName", "FieldName", fieldName);
}