javascript - 使用泛型方法访问对象值

标签 javascript jquery arrays refactoring

我正在进行一些重构并尝试创建一个通用方法,该方法能够使用对象数据填充给定的下拉列表。但是,我遇到了一个关于如何使访问不同对象数据通用的问题。例如:

原始方法

function populateDropdown(element, data) {
for (var i = 0; i < data.length; i++) 
    element.append('<option value=' + data[i].ID + '>' + data[i].Name + '</option>');
}

如果给定的对象数组具有字段 IDName,则此方法有效。我想要实现的是这样的

function populateDropdown(element, data, valueField, dataField) {
for (var i = 0; i < data.length; i++) 
    element.append('<option value=' + data[i].valueField + '>' + data[i].dataField + '</option>');
}

当我尝试像这样调用此方法时,结果是 Undefined:populateDropdown($('#myDropdown'), dataArray, "ID", "DataType") ;

当我尝试不使用 "" 时,我收到一个控制台错误,提示未定义 IDDataType。有没有办法告诉我的方法我想从对象中获取哪些字段?

最佳答案

使用bracket notation -

function populateDropdown(element, data, valueField, dataField) {
    for (var i = 0; i < data.length; i++) 
        element.append('<option value=' + data[i][valueField] + '>' + data[i][dataField] + '</option>');
}

注意 - 为了使它对属性值中的特殊字符更具弹性,我会这样做:

$('<option />', { value : data[i][valueField] }).text(data[i][dataField]).appendTo(element);

关于javascript - 使用泛型方法访问对象值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41022006/

相关文章:

javascript - 在 jQuery : How to fire a custom deferred event 中

android - 从 AsyncTask 填充数组列表

javascript - 动态更改 Angular Bootstrap Datepicker 的语言

javascript - JS函数逐渐变慢

javascript - 使用页面加载器后 Wow.js 不工作

javascript - 使用 jquery 序列化的多个文件上传仅在第二次调用时有效

php - 正则表达式为 PHP 数组的每个项目添加后缀

javascript - 使用键将数组中的对象分组并形成新的数组对象

javascript - 提交时获取新创建的列表元素

javascript - 如何安装所有 npm 依赖项的特定版本/标签