Is there a nice, clean way to concatenate a string and a variable into a variable name that Jade can understand?
Ideally, it would look something like this:
each #{shape + 'Text'} in #{shape + 'Texts'}
li #{shape + 'Text'}
I tried using window[shape + 'Text']
but that didn't seem to work. Maybe I was doing it wrong?
Here's why I want to do this:
I have an array called shapes
that looks like this: ['square', 'triangle', 'circle']
I'm using Jade's each ... in ...
function to iterate through this array. Within each iteration of my function, I need to do another each ... in ...
of one of a few other arrays. Instead of using a straight-up variable to select which array to iterate over, like each shape in shapes
, I want to concatenate shape
with a string in order to get something like each squareText in squareTexts
or each circleText in circleTexts
.
Currently, I'm using conditionals to achieve my desired result, but it's verbose and not in the minimalist spirit of the language.
Thanks in advance for any advice.
Is there a nice, clean way to concatenate a string and a variable into a variable name that Jade can understand?
Ideally, it would look something like this:
each #{shape + 'Text'} in #{shape + 'Texts'}
li #{shape + 'Text'}
I tried using window[shape + 'Text']
but that didn't seem to work. Maybe I was doing it wrong?
Here's why I want to do this:
I have an array called shapes
that looks like this: ['square', 'triangle', 'circle']
I'm using Jade's each ... in ...
function to iterate through this array. Within each iteration of my function, I need to do another each ... in ...
of one of a few other arrays. Instead of using a straight-up variable to select which array to iterate over, like each shape in shapes
, I want to concatenate shape
with a string in order to get something like each squareText in squareTexts
or each circleText in circleTexts
.
Currently, I'm using conditionals to achieve my desired result, but it's verbose and not in the minimalist spirit of the language.
Thanks in advance for any advice.
Share Improve this question edited Oct 9, 2012 at 1:48 ben asked Oct 9, 2012 at 0:01 benben 2,0472 gold badges15 silver badges16 bronze badges4 Answers
Reset to default 6So it looks like in my case, the trick is to use Javascript's eval()
function to concatenate the variable name and the string into a new variable name. Here's my successful (and succinct) implementation.
- var items = eval(shape + 'Texts');
each item, i in items
li #{items[i]}
I'd suggest looking at an option to create/eval this out of Jade, keep the jade code (and any templare for this matter) as simple as possible.
You can wrap a variable and string in parentheses.
each item, i in items
li=(shape + 'Texts')
I am not exactly following what you are referring to since I don't know jade
at all, but you would loop through an array like this.
var a = ['square', 'triangle', 'circle'];
var i, l, item;
l = a.length;
for (i = 0; i < l; i++) {
item = a[i];
// At this point, you can refer to window[item + 'Text']
// but I'm not sure what that is supposed to mean.
}
There is also an Array.prototype.every available, but I usually don't bother to monkeypatch it in to older browsers.