Javascript将2个功能合二为一

时间:2017-08-24 20:09:25

标签: javascript

我有类似的问题:Combine 3 functions into one in javascript

我有功能:

test: function() {
    for (var i = 0; i < settings.columns.test.length; i++) {
        $table.find('tbody td.test').each(function() {
             $.each(jQuery.parseJSON(settings.columns.test[i][1]), function(index, value) {
                 if ($(this).text() === value) {
                     input += '<option value="' + index + '" selected>' + value + '</option>';
                 } else {
                     input += '<option value="' + index + '">' + value + '</option>';
                 }
                 //more code...
            });
        });
    }
},
test2: function() {
    for (var i = 0; i < settings.columns.test2.length; i++) {
        $table.find('tbody td.test2').each(function() {
             $.each(jQuery.parseJSON(settings.columns.test2[i][1]), function(index, value) {
                 if ($(this).text() === value) {
                     input += '<option value="' + index + '" selected>' + value + '</option>';
                 } else {
                     input += '<option value="' + index + '">' + value + '</option>';
                 }
                 //more code...
            });
        });
    }
},

我通过以下方式调用这些函数:

columns: {
    test1: [["key", '{"0": "First value", "1": "Second Value"}']],
    test2: [["key", '{"0": "One more value", "1": "One more more value"}']]
}

如您所见,这两个功能相同,只有test - &gt; test2 ..是否可以创建一个函数并使用其他值来选择它?提前致谢

1 个答案:

答案 0 :(得分:3)

在您的测试function中使用参数,然后将test的所有实例替换为该参数(当作为属性访问时,例如columns.test,使用bracket notation进行评估而是参数)

test: function(selectorValues) {
    for (var i = 0; i < settings.columns[selectorValues].length; i++) {
        $table.find('tbody td' + selectorValues).each(function() {
             $.each(jQuery.parseJSON(settings.columns[selectorValues][i][1]), function(index, value) {
                 if ($(this).text() === value) {
                     input += '<option value="' + index + '" selected>' + value + '</option>';
                 } else {
                     input += '<option value="' + index + '">' + value + '</option>';
                 }
                 //more code...
            });
        });
    }
},

//invoke using the objects you created (or pass values directly)
test(columns.test1)