将一个字符串和一个变量连接成一个Jade可以理解的变量名,是否有一个很好的,干净的方法?
理想情况下,它看起来像这样:
each #{shape + 'Text'} in #{shape + 'Texts'}
li #{shape + 'Text'}
我尝试使用window[shape + 'Text']
,但这似乎不起作用。也许我做错了?
这就是我想要这样做的原因:
我有一个名为shapes
的数组,如下所示:['square', 'triangle', 'circle']
我正在使用Jade的each ... in ...
函数来遍历此数组。在我的函数的每次迭代中,我需要做一些其他几个数组中的另一个each ... in ...
。而不是使用直接变量来选择要迭代的数组,例如each shape in shapes
,我想将shape
与字符串连接起来,以获得类似each squareText in squareTexts
或{{1}的内容}}
目前,我正在使用条件来达到我想要的结果,但它很冗长而且不符合语言的极简主义精神。
提前感谢任何建议。
答案 0 :(得分:5)
所以看起来在我的情况下,诀窍是使用Javascript的eval()
函数将变量名和字符串连接成一个新的变量名。这是我成功(和简洁)的实现。
- var items = eval(shape + 'Texts');
each item, i in items
li #{items[i]}
答案 1 :(得分:0)
我建议看一个用Jade创建/评估这个选项的选项,尽可能简单地保留jade代码(以及任何用于此事的模板)。
答案 2 :(得分:0)
您可以在括号中包装变量和字符串。
each item, i in items
li=(shape + 'Texts')
答案 3 :(得分:-2)
我并不完全遵循你所指的内容,因为我根本不知道jade
,但你会像这样循环一个数组。
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.
}
还有一个Array.prototype.every可用,但我通常不打算将它用于旧版浏览器。