在下面的演示中,点击无序列表(#Foo
或#Biz
)中的一个应附加从相应的数组包含文本3 li
的,无论是arrayFoo或arrayBiz动态指JS阵列。尽管我在动态引用正确的数组时遇到了问题,但我想避免在实际项目中使用冗长的if/else语句集,其中可能有5到30个元素/数组。使用级联命名空间
我想通过建立像这样listArray = (array + listName)
命名空间动态选择阵列,但不起作用。有什么办法连接一个原始的变量名,即使它不像那个语法那么简洁?
理想情况下,我想保留数组原样,我不想将它们组合成更大的数组阵列,或将它们转换成字典,但如果这是唯一的解决方案,我肯定会接受它。
<ul id="Foo">Foo</ul>
<ul id="Biz">Biz</ul>
arrayFoo = [
"first foo item",
"second foo item",
"third foo item"];
arrayBiz = [
"first biz item",
"second biz item",
"third biz item"];
$('ul').click(function() {
listName = $(this).attr('id');
// hardcoding this var so demo works...
listArray = arrayBiz;
// I want to set listArray equal to (array + listName)
// but I'm not sure how. When working correctly,
// clicking #Foo should append the arrayFoo items,
// and clicking #Biz should append arrayBiz items.
listArray.forEach(function (listItem) {
$('#' + listName).append('<li>' + listItem + '</li>');
});
});
https://jsfiddle.net/m841o7ys/6/ 不过我建议你incapsulate你的数据给对象。请参阅@ RoryMcCrossan的答案... –