为了这个问题,这是我遇到的问题的简化版本。
如果我的HTML中有<select>
:
<select>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
</select>
然后我的JS:
var a,b = 12;
var c1,d1,e1,
c2,d2,e2,
c3,d3,e3,
c4,d4,e4,
c5,d5,e5,
c6,d6,e6 = // Assigned individually from loop. NOT actual code.
function myFunction(a,b,c,d,e){
// do something with a,b,c,d,e
}
$('select').on('change', function() {
var id = $(this).val();
c = c+id;
d = d+id;
e = e+id;
myFunction(a, b, c, d, e);
}
在上面的代码中,如果我选择选项3,我想传递函数变量c3,d3,e3。
如何分配&#39; 3&#39;从id到传递的变量?这段代码的选择部分有什么问题?
请帮忙。感谢。
问题#2:继续@ David的回答
如果我按照你建议的方式构建一个对象数组。
destinations = [
{id:'123', title:'London', lat:'1.52121' , lng:'-1.3423423', content:'a string'},
{id:'456', title:'Paris', lat:'1.52121' , lng:'-1.3423423', content:'a string'},
{id:'634', title:'Amsterdam', lat:'1.52121' , lng:'-1.3423423', content:'a string'}
]
如果我想要迭代数组并为每个对象创建GoogleMaps标记的变量,我该怎么做
$.each(destinations, function(i, ob) {
$.each(ob, function (key, value) {
var marker[ob.id] = new google.maps.Marker({
draggable: false,
map: map,
icon: dotMarker,
position: {lat: ob.lat, lng: ob.lng}
});
});
答案 0 :(得分:3)
考虑更合理的数据结构而不是所有这些个体变量。从对象开始:
{
c: '',
d: '',
e: ''
}
毕竟,如果c
,d
和e
应该以某种方式一起解释并表示已连接的内容,那么这听起来像是您试图描述的对象
然后只有一个该对象的数组:
var myObjects = [
{ c: '', d: '', e: '' },
{ c: '', d: '', e: '' },
{ c: '', d: '', e: '' },
// etc.
]
这更符合您的评论建议:
//从循环
动态分配的值
那么您的选项值包含的只是您要查找的元素的索引:
<select>
<option value="0">1</option>
<option value="1">2</option>
<option value="2">3</option>
<option value="3">4</option>
<option value="4">5</option>
<option value="5">6</option>
</select>
您可以根据该索引获取元素:
var id = $(this).val();
var myObject = myObjects[id];
myFunction(a, b, myObject.c, myObject.d, myObject.e);
可能 可以做更多的事情来改善这里的事情,但是这个例子的人为设想使它在语义上变得模糊。这里的要点是将逻辑放入你正在使用的结构中,而不是用复杂的逻辑来解释缺乏结构。
“智能数据结构和哑码比其他方式更好。” - Eric S. Raymond,“大教堂和市集”
答案 1 :(得分:0)
您的代码有很多改进,但如果您想使用当前结构,那么您可以执行类似的操作。
var a,b = 12; //note: all variables are defined in global (window) scope
var c1,d1,e1,
c2,d2,e2,
c3,d3,e3,
c4,d4,e4,
c5,d5,e5,
c6,d6,e6 = // Assigned individually from loop. NOT actual code.
$('select').on('change', function() {
var id = $(this).val(); //let it be 3
var c = window['c' + id]; //c3
var d = window['d' + id]; //d3
var e = window['e' + id]; //e3
myFunction(a, b, c, d, e);
}