简化我的功能(循环,数组)?

tri*_*t77 6 javascript arrays jquery loops function

我有一个重复几次的函数,我相信可以从数组中简化和发送变量.

var i = masterdata.timing.split(',');
        var index = 0;
        for (index = 0; index < i.length; ++index) {
            $("#timing_" + i[index].trim()).prop('checked', true);
        }

    var i = masterdata.concern.split(',');
    var index = 0;
    for (index = 0; index < i.length; ++index) {
        $("#concern_" + i[index].trim()).prop('checked', true);
    }

    var i = masterdata.steps.split(',');
    var index = 0;
    for (index = 0; index < i.length; ++index) {
        $("#steps_" + i[index].trim()).prop('checked', true);
    }
Run Code Online (Sandbox Code Playgroud)

也许只是将类别更改为变量并从数组中发送catergories?

var chkgroup = [
            'timing, concern, steps'
        ]
Run Code Online (Sandbox Code Playgroud)

And*_*ker 4

你的想法应该可以正常工作:

var i;
var index = 0;
var j = 0;
var chkgroup = ['timing', 'concern', 'steps'];
var currentGroup;

for (j = 0; j < chkgroup.length; ++j) {
    currentGroup = chkgroup[j];

    i = masterdata[currentGroup].split(',');

    for (index = 0; index < i.length; ++index) {
        $("#" + currentGroup + "_" + i[index].trim())
            .prop('checked', true);
    }        
}
Run Code Online (Sandbox Code Playgroud)

如果数组确实与 中的chkgroup对象匹配,则可以使用外循环:keysmasterdatafor..in

var i;
var index = 0;
var currentGroup;

for (currentGroup in masterdata) {
    i = masterdata[currentGroup].split(',');

    for (index = 0; index < i.length; ++index) {
        $("#" + currentGroup + "_" + i[index].trim())
            .prop('checked', true);
    }        
}
Run Code Online (Sandbox Code Playgroud)

请注意,没有为 定义顺序for...in,因此如果您需要保证按特定顺序迭代对象属性,那么最好使用预定义的数组。

您还可以喜欢$.map

var values = $.map(masterdata, function (i, currentGroup) {
    return $.map(i.split(','), function (val) {
        return $('#' + currentGroup + '_' + val.trim());
    });
});

$(values).prop('checked', true);
Run Code Online (Sandbox Code Playgroud)