Skip to content

Instantly share code, notes, and snippets.

@nexpr
Created December 19, 2015 12:21
Show Gist options
  • Save nexpr/ae7ac36cefa7cbc02bb6 to your computer and use it in GitHub Desktop.
Save nexpr/ae7ac36cefa7cbc02bb6 to your computer and use it in GitHub Desktop.
`` で使いまわせるテンプレート
Array.prototype.alternate = function(...arrs){
var res = []
arrs.unshift(this)
for(var i=0, precount=-1;precount!==(precount=res.length);i++){
for(var j=0;j<arrs.length;j++){
var arr = arrs[j]
i < arr.length && res.push(arr[i])
}
}
return res
}
function Template(parts, ...names){
var obj = {
parts,
names
}
obj.__proto__ = Template.prototype
return obj
}
Template.prototype.generate = function(elements){
if(Array.isArray(elements)){
return this.parts.alternate(elements.slice(0, this.names.length)).join("")
}else{
return this.parts.alternate(this.names.map(e => elements[e])).join("")
}
}
var template = Template `(${"test"}) [${"sample"}] "${"name"}"`
var result = template.generate({
test: "てすと",
sample: "さんぷる",
name: "なまえ"
})
console.log(result)
// (てすと) [さんぷる] "なまえ"
var result = template.generate([123,456,7890])
console.log(result)
// (123) [456] "7890"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment