यहाँ कुछ उदाहरण दिए गए हैं कि आप मेरे साथ क्या कर सकते हैं (छोटा [jslt.min.js] ) JSLT - जावास्क्रिप्ट लाइटवेट ट्रांसफ़ॉर्म:
https://jsfiddle.net/YSharpLanguage/c7usrpsL/10
( (jslt.min.js] का वजन ~ 3.1kb की दर से घटाया गया )
यह सिर्फ एक कार्य है,
function Per ( subject ) { ... }
... जो वास्तव में XSLT (1.0) प्रसंस्करण मॉडल की नकल करता है ।
(cf. "ट्रांसफॉर्म" और "टेम्प्लेट" आंतरिक कार्य, प्रति शरीर में)
तो, संक्षेप में, यह सिर्फ उस एकल में बेक किया गया है function Per ( subject ) { ... }
जो इसके (इसके भी) अनूठे तर्क के प्रकार पर अपना मूल्यांकन करने के लिए लागू करता है, या तो:
1) ऐरे विषय
नोडसेट निर्माण / फ़िल्टरिंग / फ़्लैटनिंग / ग्रुपिंग / ऑर्डरिंग / आदि , यदि विषय एक सरणी है, जहां परिणामी नोडसेट (एक एरे के रूप में अच्छी तरह से) बढ़ाया जाता है, और तदनुसार नामित विधियों के लिए बाध्य होता है ( केवल लौटाए गए एरे का उदाहरण कॉल के लिए Per ( subjectArray )
है) विस्तारित; अर्थात, Array.prototype को छोड़ दिया गया है)
यानी, प्रति :: ऐरे -->
ऐरे
(परिणामी एरे के विस्तार के तरीकों में स्व-व्याख्यात्मक नाम जैसे, GroupBy, ऑर्डरबाय, फ्लैटनबी, आदि - cf. उदाहरणों में उपयोग)
2) स्ट्रिंग विषय
स्ट्रिंग प्रक्षेप , यदि विषय एक स्ट्रिंग है
("प्रति" तब एक विधि के साथ एक वस्तु लौटाता है map ( source )
, जो विषय टेम्पलेट स्ट्रिंग से बंधा है )
अर्थात, प्रति :: स्ट्रिंग -->
{मानचित्र :: ( AnyValue -->
स्ट्रिंग )}
जैसे,
Per("Hi honey, my name is {last}. {first}, {last}.").map({ "first": "James", "last": "Bond" })
पैदावार:
"Hi honey, my name is Bond. James, Bond."
जबकि या तो
Per("Those '{*}' are our 10 digits.").map([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ])
या
Per("Those '{*}' are our 10 digits.").map(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
पैदावार समान:
"Those '0123456789' are our 10 digits."
लेकिन सिर्फ
Per("Those '{*}' are our 10 digits.").map([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ], ", ")
पैदावार
"Those '0, 1, 2, 3, 4, 5, 6, 7, 8, 9' are our 10 digits."
3) ट्रांसफॉर्म विषय
XSLT लुक-अलाइक ट्रांसफ़ॉर्मेशन , यदि विषय पारंपरिक रूप से परिभाषित "$" सदस्य के साथ हैश है, जो पुनर्लेखन नियमों की सरणी प्रदान करता है (और उसी तरह (2), "प्रति" तो map ( source )
विषय से जुड़ी विधि के साथ एक वस्तु देता है रूपांतर - जहाँ
"रूलनाम" Per ( subjectTransform [ , ruleName ])
वैकल्पिक है और <xsl: call-template name = "templateName"> ... के समान कार्यक्षमता प्रदान करता है ...)
यानी, प्रति :: ( ट्रांसफॉर्म [, रूलनेम: स्ट्रिंग ]) -->
{मैप :: ( AnyValue -->
AnyValue )}
साथ में
रूपांतरण :: {$ :: सरणी पुनर्लेखन नियमों के [rw.r.] }
( (rw.r.) विधेय और टेम्पलेट फ़ंक्शन जोड़े को समर्पित करें )
उदाहरण के लिए, दिया गया (... एक और आकस्मिक उदाहरण)
// (A "Member" must have first and last names, and a gender)
function Member(obj) {
return obj.first && obj.last && obj.sex;
}
var a_transform = { $: [
//...
[ [ Member ], // (alike <xsl:template match="...">...)
function(member) {
return {
li: Per("{first} {last}").map(member) +
" " +
Per(this).map({ gender: member.sex })
};
}
],
[ [ function(info) { return info.gender; } ], // (alike <xsl:template match="...">...)
function(info) { return Per("(gender: {gender})").map(info); }
],
[ [ "betterGenderString" ], // (alike <xsl:template name="betterGenderString">...)
function(info) {
info.pronoun = info.pronoun || "his/her";
return Per("({pronoun} gender is {gender})").map(info);
}
]
//...
] };
फिर
Per(a_transform).map({ "first": "John", "last": "Smith", "sex": "Male" })
पैदावार:
{ "li": "John Smith (gender: Male)" }
जबकि ... (बहुत अधिक <xsl:call-template name="betterGenderString">...
)
"James Bond... " +
Per(a_transform, "betterGenderString").map({ "pronoun": "his", "gender": "Male" })
पैदावार:
"James Bond... (his gender is Male)"
तथा
"Someone... " +
Per(a_transform, "betterGenderString").map({ "gender": "Male or Female" })
पैदावार:
"Someone... (his/her gender is Male or Female)"
4) नहीं तो
पहचान समारोह , अन्य सभी मामलों में
यानी, प्रति :: टी -->
टी
(अर्थात Per === function ( value ) { return value ; }
)
ध्यान दें
ऊपर (3), टेम्पलेट फ़ंक्शन के शरीर में एक जावास्क्रिप्ट का "यह" इस प्रकार कंटेनर / मालिक ट्रांसफॉर्म और उसके नियमों के सेट ($ द्वारा परिभाषित किया गया है के लिए बाध्य है : [...] सरणी) - इसलिए,) उस संदर्भ में "प्रति (यह)" अभिव्यक्ति बनाते हुए, XSLT के बराबर एक कार्यात्मक रूप से करीब
<xsl:apply-templates select="..."/>
'HTH,