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