2014-10-16 6 views
6

मेरे पास एक ऐसा फ़ंक्शन है जिसे कुछ बार दोहराया जाता है, और मेरा मानना ​​है कि सरणी को सरलीकृत करना और सरणी भेजना संभव है।मेरे फ़ंक्शन को सरल बनाएं (लूप, सरणी)?

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); 
    } 

शायद श्रेणियों को एक चर में बदल दें और एक सरणी से कैटरगरीज भेजें? chkgroup सरणी वास्तव में masterdata में वस्तु keys से मेल खाता है

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); 
    }   
} 

, आप एक बाहरी for..in बजाय पाश इस्तेमाल कर सकते हैं:

var chkgroup = [ 
      'timing, concern, steps' 
     ] 

उत्तर

4

आपका विचार ठीक से कार्य करेंगे

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); 
    }   
} 

ध्यान दें कि for...in के लिए कोई आदेश परिभाषित नहीं किया गया है, इसलिए यदि आपको यह गारंटी देने की आवश्यकता है कि आप ओ पर फिर से चल रहे हैं एक निश्चित क्रम में गुणों को घुमाएं, पूर्वनिर्धारित सरणी का उपयोग करना बेहतर हो सकता है।

तुम भी $.map साथ फैंसी मिल सकता है:

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

$(values).prop('checked', true); 
+0

वर मैं में, श्रेणियों के साथ परिवर्तन masterdata.timing। – triplethreat77

+0

@ triplethreat77: आह! क्षमा करें मुझे याद आया। अपडेट हो रहा है ... –

+0

@ triplethreat77: अपडेट किया गया, कृपया एक नज़र डालें –

0
var chkgroup = [ 'timing', 'concern', 'steps' ]; 

setProps(chkgroup, masterdata); 

function setProps(c, m) { 
    $.each(c, function(i, group) { 
     var i = m[group]split(','); 
     var index = 0; 
     for (index = 0; index < i.length; ++index) { 
      $("#" + group + "_" + i[index].trim()).prop('checked', true); 
     } 
    }); 
} 
0

वास्तव में अपने कोड अभी भी एक सा शोर और, पढ़ने योग्य नहीं है यानी डेवलपर कम से कम कुछ ही मिनटों के लिए उसका विश्लेषण करने खर्च करना पड़ता है समझें कि तर्क सही है या नहीं। loDash या अंडरस्कोर के उपयोग के साथ, अपने कोड को सरल बनाया जा सकता है और बारी इस में:

var selector = _.chain(masterdata) 
     //pick only needed items 
     .pick(masterdata, 'timing', 'concern', 'steps') 
     .map(function (item, key) { 
      //split and transform the string into selector, e.g. #timing_1 
      var ids = item.split(','); 
      var mapped = _.map(ids, function (id) { return "#" + key + "_" + id.trim(); }); 
      return mapped.join(); 
     }) 
     .value() 
     .join(); 
    $(selector).prop('checked', true); 

और काम कर नमूने पर jsfiddle

संबंधित मुद्दे