重构仅根据条件和返回值进行区分的JavaScript函数
Refactoring JavaScript functions that differentiate only by condition and return value
目前我有3个非常相似的函数。它们仅在输入参数名称、条件和返回值方面有所区别。我要重构它们,我想你们可能会告诉我,在你们看来重构它们的最佳方式是什么。感觉必须有一个函数,但有一个可理解的名称,并且条件应该作为函数的参数或类似的东西传递。
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;
};
那么,您可以使用动态属性访问器并将属性名称作为参数传递:
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);
}
像这样?
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;
};
相关文章:
- 如何为表构建可扩展的子行(jQuery/Javascript)
- 用于在表中添加行的Javascript代码将单元格中的数据复制到新行中
- 正在查找这些JQuery代码行的Javascript
- 空行出现JavaScript错误
- 在表格中应用动态行颜色 Javascript/VBscript
- 像“apples: 5”这样的行在 JavaScript 中有什么作用
- 具有新创建的行的 Javascript tr 单击事件(更新 css)
- JS- 文本区域行到 javascript 数组
- 用重复的相似行简化 javascript 函数(带有循环?
- 为什么我的拖放区 JavaScript 表单不起作用
- 添加换行符 JavaScript pdf 表单时的文本字段空白
- 寻找使用命令行进行 Javascript 编码/实验的 shell
- 消除换行符-javascript
- 如何在itemdatabound期间每行调用javascript函数
- 每次对1行使用javascript onblur事件
- 单击列值时高亮显示表中的特定行.需要javascript帮助
- 用于编辑表行的Javascript
- 如何使用行索引javascript禁用getelement()
- 我如何在冒号上分割这行(在JavaScript中),除非冒号前面有http或https
- 如何获得标题属性在我的左行在javascript