【问题标题】:Create var inside of each()在 each() 中创建 var
【发布时间】:2014-01-14 10:25:45
【问题描述】:

我有一个包含一些数字的数组:

var bullet = [ 0, 39, 42, 89, 115 ];

并创建了一个 each 循环

$.each(bullet, function( index, value ) {

});

现在我想创建一个变量,并将索引作为每个项目名称的一部分。 像这样:

var bullet + index = document.getElementById("bullet_" + index);

应该是这样的:

var bullet0 = document.getElementById("bullet_0");
var bullet1 = document.getElementById("bullet_1");

等等……

但我的代码不起作用 - 它总是这样 Uncaught SyntaxError: Unexpected identifier

【问题讨论】:

  • 这……不是个好主意。
  • bullet一样使用数组
  • 我认为您需要解释一下为什么您要这样做?因为我很确定你是从错误的方式来的。
  • 尝试简单的数组或js对象
  • 不是一个好主意,但你可以。 window['bullet' + index] = document.getElementById("bullet_" + index);

标签: javascript jquery html each var


【解决方案1】:

您不能创建动态变量名称。但是,您可以通过创建包装对象并将可能的变量分配为该对象的属性来创建动态键:

var bullets = {};

$.each(bullet, function( index, value ) {
    bullets[ index ] = ( document.getElementById( 'bullet_' + index ) );
});

更好的是,您可以使用数组(因为键是数字):

var bullets = [];

$.each(bullet, function( index, value ) {
    bullets.push( document.getElementById( 'bullet_' + index ) );
});

在任何一种情况下,而不是您建议的访问方法

bullet0;
bullet1;

您可以按如下方式访问元素:

bullet[ 0 ];
bullet[ 1 ];

【讨论】:

  • 这是map() 的完美用例吗?
  • @Pavlo 我相信是的——事实上我肯定会推荐Jack's answer。我将把它留在这里,因为详细说明可能非常有用 - 对于本机不支持 map 的浏览器,上述方法基本上是在幕后进行的。
【解决方案2】:

您可能正在寻找的是jQuery.map(),而不是jQuery.each()

var bullets = $.map(bullet, function(value, index) {
    return document.getElementById('bullet_' + index);
});

【讨论】:

    【解决方案3】:

    使用下划线js#map http://underscorejs.org/#map

    _.map([1,2,3,4], function(index) { 
       return document.getElementById('bullet_' + index);
    });
    

    【讨论】:

    • 他为什么要这么做? Native map() 已经存在很长时间了,jQuery map() 也是如此。没有必要为此在项目中添加新库。
    • @Pavlo 更重要的是,OP 使用的是 jQuery。我不相信原生地图可用于 IE8。
    • @Jack 因为问题中没有这样的限制,所以很自然地假设浏览器支持 ES5。
    • @Pavlo Natural 直到你的老板因为他的浏览器出现 JavaScript 错误而打你的头;-)
    • @Jack 您是专业的开发人员吗?您的规范的支持表要么包括 IE8,要么不包括。
    猜你喜欢
    • 2022-11-23
    • 1970-01-01
    • 2011-09-06
    • 2019-10-05
    • 1970-01-01
    • 2015-08-13
    • 1970-01-01
    • 2015-09-12
    • 2018-05-03
    相关资源
    最近更新 更多