 
 I know enough to adapt others' code for my purposes, but I do not know enough yet to originate code.  I have a sheetworker that is currently working, but I wonder if there is a better way to do this. It's building links that will be plugged into a Summary chat menu. The sheet has spaces for up to 6 specialties for these three skills. I only want links for the skills where a specialty is declared. I am assuming that the player will fill them in in order, so if specialty 2 is blank, I assume 3, 4, 5, and 6 are blank, too.  1) Is there a better way to do this that is efficient but clear to follow and update? My solution seems like a lot of code, but I can follow what is going on for the most part.  2) I would like to tweak this somewhat and have the display of the main skill name be capitalized (so "Craft" instead of "craft") in the label (the first  ${s}  reference in each "build =" line). I think what I need to do is make cppSkills into a different array, associating "craft" with "Craft," "perform" with "Perform," etc., but I'm not sure how to go about doing that.    Thanks for any suggestions and advice!    const cppSkills = ["craft", "perform", "profession"]; const cppIds = ["1", "2", "3", "4", "5", "6"]; const cppskillAttrs = _.flatten(_.map(cppSkills,(s)=>_.map(cppIds, (i)=>`${s}${i}_name`))); const cppskillEvents = _.map(cppskillAttrs,(a)=>`change:${a}`);  on(`${cppskillEvents.join(' ')}`, function() {     getAttrs([...cppskillAttrs], (value) =>{         let update = {};         _.each(cppSkills, (s)=>{             if (value[`${s}1_name`] != "") {                 build = `[${s} (@{${s}1_name})](~${s}1_check)`;                 if (value[`${s}2_name`] != "") {                     build = build + `[${s} (@{${s}2_name})](~${s}2_check)`;                     if (value[`${s}3_name`] != "") {                         build = build + `[${s} (@{${s}3_name})](~${s}3_check)`;                         if (value[`${s}4_name`] != "") {                             build = build + `[${s} (@{${s}4_name})](~${s}4_check)`;                             if (value[`${s}5_name`] != "") {                                 build = build + `[${s} (@{${s}5_name})](~${s}5_check)`;                                 if (value[`${s}6_name`] != "") {                                     build = build + `[${s} (@{${s}6_name})](~${s}6_check)`;                                 }                             }                         }                     }                 }             }             update[`${s}var`] = build;         });         setAttrs(update);     }); });     
 
				
			