最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Concatenate a string and a variable into a variable name for Jade - Stack Overflow

programmeradmin3浏览0评论

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 badges
Add a ment  | 

4 Answers 4

Reset to default 6

So 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.

发布评论

评论列表(0)

  1. 暂无评论