Javascript 如何基于select值将变量传递给函数?

Javascript 如何基于select值将变量传递给函数?,javascript,jquery,function,variables,Javascript,Jquery,Function,Variables,为了这个问题,这是我所遇到问题的简化版本 如果我的HTML中有: <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<

为了这个问题,这是我所遇到问题的简化版本

如果我的HTML中有:

<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>
在上面的代码中,如果我选择选项3,我想传递函数变量c3、d3、e3

如何将id中的“3”分配给传递的变量?此代码的选择部分有什么问题

请帮忙。谢谢

问题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}
  }); 
});

考虑一个更合理的数据结构,而不是所有这些单独的变量。从一个对象开始:

{
  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>
这里可能还有更多可以改进的地方,但是这个例子的人为性质使得它在语义上很模糊。这里的要点是将逻辑放入您正在使用的结构中,而不是用复杂的逻辑来解释结构的缺乏

聪明的数据结构和愚蠢的代码比另一种方式好得多。 -埃里克·S·雷蒙德,大教堂和集市


代码有很多改进,但是如果您想使用当前的结构,那么您可以这样做

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);
}

首先,我将使用一个数组或一个对象来保存所有这些值,而不是所有的单个变量。这里似乎需要一个更合理的数据结构。c、 d和e看起来像是一个对象,你需要这些对象的数组。然后,您只需要该数组中的第三个元素。类似这样的方法可能是快速而肮脏的解决方案:将c=c+id替换为evalc=c+id;:好的,伙计们。我明白你们的意思。谢谢你的提琴。我确实需要对对象进行一些重新填充。谢谢你的quickie@Miro-这解释了问题的这一方面。谢谢。我明白你的意思。好多了DHi@David和其他人,如果你不介意的话,还有一个问题:我添加了第二个问题,涉及到你的答案。如果你有时间,请看一下。请参阅问题正文中的问题2更新。非常感谢。
var id = $(this).val();
var myObject = myObjects[id];
myFunction(a, b, myObject.c, myObject.d, myObject.e);
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);
}