මගේ ප්රතිචාරය බොහෝ දුරට පදනම් වී ඇත්තේ මෙහි ඉහළම ශ්රේණිගත කළ ප්රතිචාරයෙන් වන අතර සෑම කෙනෙකුම තේරුම් ගනීවි (මගේ GitHub හි ද එකම පැහැදිලි කිරීමක් ඇත). සිතියම සමඟ ඔහුගේ අනුකම්පාව ක්රියාත්මක වන්නේ මේ නිසා ය:
Object.keys(images).map((key) => images[key] = 'url(' + '"' + images[key] + '"' +
')');
ශ්රිතයේ පරමාර්ථය වන්නේ අරාවක් ආපසු නොගෙන සියලු වස්තූන් (වස්තු සහ අරා එක හා සමානව) ලබා ගත හැකි ක්රමයක් භාවිතා කරමින් වස්තුවක් ගෙන එහි මුල් අන්තර්ගතය වෙනස් කිරීමයි. JS තුළ ඇති සෑම දෙයක්ම පාහේ වස්තුවක් වන අතර, එම හේතුව නිසා උරුමයේ නල මාර්ගයට පහළින් ඇති මූලද්රව්යයන් තාක්ෂණිකව රේඛාවට ඉහළින් සිටින අයට භාවිතා කළ හැකිය (සහ එය පෙනෙන පරිදි).
මෙය ක්රියාත්මක වීමට හේතුව .map ශ්රිතයන් අරාව නැවත ලබා දීමයි. ඔබ දැනට පවතින වස්තුවක් වෙනස් කිරීම වෙනුවට අරාවෙහි පැහැදිලි හෝ ව්යංගයෙන් නැවත පැමිණීම අවශ්ය වේ. Object.keys භාවිතා කිරීමෙන් වස්තුව අරාව යැයි සිතීමට ඔබ මූලිකවම උපක්රම යොදනු ඇත, එමඟින් එක් එක් යතුරු සම්බන්ධ කර ඇති අගයන් මත එහි ක්රියාකාරිත්වය සමඟ සිතියම් ක්රියාකාරිත්වය භාවිතා කිරීමට ඔබට ඉඩ සලසයි (මම අහම්බෙන් අරා ආපසු ලබා දුන්නද එය සවි කළෙමි). සාමාන්ය අර්ථයෙන් ආපසු යාමක් සිදු නොවන තාක් කල්, මුල් වස්තුව නොනවත්වා නිර්මාණය කර ඇති අතර ක්රමලේඛනය කළ පරිදි වෙනස් කරනු නොලැබේ.
මෙම විශේෂිත වැඩසටහන රූප ලෙස හැඳින්වෙන වස්තුවක් ගෙන එහි යතුරු වල අගයන් ගෙන වෙනත් ශ්රිතයක් තුළ භාවිතා කිරීම සඳහා url ටැග් එකතු කරයි. මුල් පිටපත මෙයයි:
var images = {
snow: 'https://www.trbimg.com/img-5aa059f5/turbine/bs-md-weather-20180305',
sunny: 'http://www.cubaweather.org/images/weather-photos/large/Sunny-morning-east-
Matanzas-city- Cuba-20170131-1080.jpg',
rain: 'https://i.pinimg.com/originals/23/d8
/ab/23d8ab1eebc72a123cebc80ce32b43d8.jpg' };
... සහ වෙනස් කරන ලද්දේ මෙයයි:
var images = {
snow: url('https://www.trbimg.com/img-5aa059f5/turbine/bs-md-weather-20180305'),
sunny: url('http://www.cubaweather.org/images/weather-photos/large/Sunny-morning-
east-Matanzas-city- Cuba-20170131-1080.jpg'),
rain: url('https://i.pinimg.com/originals/23/d8
/ab/23d8ab1eebc72a123cebc80ce32b43d8.jpg')
};
නැවත නොපැමිණෙන තාක් කල් වස්තුවේ මුල් ව්යුහය නොවෙනස්ව පවතී. එය සාමාන්ය පරිදි අරාවක් ආපසු ලබා නොදෙන්න, එවිට සියල්ල හොඳින් වනු ඇත. ඉලක්කය වන්නේ මුල් අගයන් (රූප [යතුර) නැවත අවශ්ය දේට යලි මිස වෙන කිසිවක් නොවේ. මා දන්නා තරමින්, අරාව ප්රතිදානය වැළැක්වීම සඳහා රූප ප්රතිනිර්මාණය කිරීම [යතුර] සහ අරාවක් ආපසු ලබා දෙන ලෙස ව්යංගයෙන් හෝ පැහැදිලිව ඉල්ලීමක් කර නොමැත (විචල්ය පැවරුම මෙය සිදු කරන අතර මා වෙනුවෙන් පෙරළා ඉදිරියට යමින් සිටියේය).
සංස්කරණය කරන්න:
මුල් වස්තුව වෙනස් කිරීම වළක්වා ගැනීම සඳහා නව වස්තු නිර්මාණය කිරීම පිළිබඳ ඔහුගේ අනෙක් ක්රමයට ආමන්ත්රණය කිරීම (සහ අහම්බෙන් ප්රතිදානයක් ලෙස අරාවක් නිර්මාණය වීම වළක්වා ගැනීම සඳහා නැවත පැවරීම තවමත් අවශ්ය බව පෙනේ). මෙම කාර්යයන් ඊතල සින්ටැක්ස් භාවිතා කරන අතර අනාගත භාවිතය සඳහා නව වස්තුවක් නිර්මාණය කිරීමට ඔබට අවශ්ය නම්.
const mapper = (obj, mapFn) => Object.keys(obj).reduce((result, key) => {
result[key] = mapFn(obj)[key];
return result;
}, {});
var newImages = mapper(images, (value) => value);
මෙම කාර්යයන් ක්රියාත්මක වන ආකාරය මෙසේ ය:
mapFn පසුව එකතු කළ යුතු ශ්රිතය (මේ අවස්ථාවේ දී (අගය) => අගය) ගෙන එම යතුර සඳහා වටිනාකමක් ලෙස එහි ගබඩා කර ඇති ඕනෑම දෙයක් ආපසු ලබා දෙයි (නැතහොත් ඔහු මෙන් ප්රතිලාභ අගය වෙනස් කළහොත් දෙකකින් ගුණ කළහොත්) mapFn ( obj) [යතුර],
ප්රති result ලයක් ලෙස යතුර හා සම්බන්ධ මුල් අගය නැවත අර්ථ දක්වයි [key] = mapFn (obj) [key]
සහ ප්රති result ලය මත සිදු කරන ලද මෙහෙයුම නැවත ලබා දෙයි (.reduce ශ්රිතය අවසානයේ ආරම්භ කරන ලද වරහන් තුළ ඇති සමුච්චය).
මේ සියල්ල තෝරාගත් වස්තුව මත සිදු කෙරෙන අතර නැවත එහි ආපසු එන අරාවක් සඳහා ව්යාජ ඉල්ලීමක් විය නොහැකි අතර එය ක්රියාත්මක වන්නේ මට කිව හැකි තාක් දුරට අගයන් නැවත පැවරීමේදී පමණි. මේ සඳහා සමහර මානසික ජිම්නාස්ටික් අවශ්ය වන නමුත් ඉහත දැකිය හැකි පරිදි කේත රේඛා අඩු කරයි. ප්රතිදානය පහත දැක්වෙන ආකාරයටම සමාන වේ:
{snow: "https://www.trbimg.com/img-5aa059f5/turbine/bs-
md-weather-20180305", sunny: "http://www.cubaweather.org/images/weather-
photos/l…morning-east-Matanzas-city-Cuba-20170131-1080.jpg", rain:
"https://i.pinimg.com/originals/23/d8
/ab/23d8ab1eebc72a123cebc80ce32b43d8.jpg"}
මෙය NON-NUMBERS සමඟ වැඩ කළ බව මතක තබා ගන්න. MapFN ශ්රිතයේ අගය සරලව නැවත ලබා දීමෙන් ඔබට ඕනෑම වස්තුවක් අනුපිටපත් කළ හැකිය.
Object.keys
, එය මනාව අර්ථ දක්වා ඇති අනුපිළිවෙලක් නොමැත. එය ගැටළු සහගත විය හැකිය, ඒObject.getOwnPropertyNames
වෙනුවට භාවිතා කිරීමට මම යෝජනා කරමි .