Javascript 在2个数组之间关联项
编辑: 这可能很容易,但我正努力做到这一点。如何在2个数组中循环以将第1项与第1项、第2项与第2项关联,等等 我试图在调用“abc”时触发“a”,在调用“zxy”时触发“b”Javascript 在2个数组之间关联项,javascript,jquery,arrays,Javascript,Jquery,Arrays,编辑: 这可能很容易,但我正努力做到这一点。如何在2个数组中循环以将第1项与第1项、第2项与第2项关联,等等 我试图在调用“abc”时触发“a”,在调用“zxy”时触发“b” var a = ["a", "b"], b = ["abc", "xyz"]; for(i=0;i<a.length;i++){ html2canvas(b[i]).then(function(canvas) { var logcvs=document.createEl
var a = ["a", "b"],
b = ["abc", "xyz"];
for(i=0;i<a.length;i++){
html2canvas(b[i]).then(function(canvas) {
var logcvs=document.createElement('canvas');
logcvs.id=a[i];
alert(a[i]) // I want "a" to popup once and "b" once to popup once
}
}
变量a=[“a”,“b”],
b=[“abc”,“xyz”];
对于(i=0;i我真的不明白你的意图,但我认为这可能会解决你的问题 只需将值存储在如下对象中:
var newObject={
答:“abc”,
b:“xyz”
}
您的数组键/索引很好,问题是变量i
的作用域。为了创建作用域,您必须创建一个函数(Javascript中没有循环变量作用域):
变量a=[“a”,“b”],
b=[“abc”,“xyz”];
函数createCanvas(i){
/*这里的值可能是1*/
html2canvas(b[i])。然后(函数(画布){
var logcvs=document.createElement('canvas');
logcvs.id=a[i];/*i在这里仍然是1,没有变化*/
}
};
对于(i=0;i
let允许您声明范围限于
用于其上的块、语句或表达式。这与
关键字,用于全局或局部定义变量
不考虑块范围的整个函数
您的代码将变成:
var a = ["a", "b"],
b = ["abc", "xyz"];
for(i=0;i<a.length;i++){
let j=i; /* Here declare the block-scope-variable */
html2canvas(b[j]).then(function(canvas) {
var logcvs=document.createElement('canvas');
logcvs.id=a[j];
alert(a[j]);
}
}
变量a=[“a”,“b”],
b=[“abc”,“xyz”];
for(i=0;i代码的问题在于,您在
for
循环的每次迭代中都要创建一个函数,您必须将代码改为函数调用:
变量a=[“a”,“b”],
b=[“abc”,“xyz”];
//在此处创建函数以接受泛型参数
html2canvas=函数(e1,e2){
对于(i=0;我能说得更准确些吗?
trigger
和“abc”是什么意思?我在上面的代码中没有看到任何事件,没有任何功能。@skobaljic:谢谢。请看我的编辑。基本上,我希望在html2canvas(b[i])中执行alert(a[i])
时,能让“a”弹出一次,“b”弹出一次.then(function(canvas){…}
谢谢。看起来不错。在html2canvas(b[i])之后是否可以执行类似var x=i
的操作。然后(function(canvas,i){
并使用x
作为当前值?我已经尝试过,但失败了,但为什么不可能?因为您仍然在全局范围内,在for
循环的末尾,x
将获得最后一个值(在示例代码1中)。返回函数是一个异步函数-在执行全局变量时,x
始终为1(a.length-1
).但是如果您使用参数i
调用函数,那么该变量的范围现在在函数中,因此您可以在获得承诺后使用它。我相信这个变量解决方案的范围将在我的一生中使用…:)我看到你的编辑…这正是我在第一条评论中提到的。再次感谢你提供的额外信息。
var a = ["a", "b"],
b = ["abc", "xyz"];
for(i=0;i<a.length;i++){
let j=i; /* Here declare the block-scope-variable */
html2canvas(b[j]).then(function(canvas) {
var logcvs=document.createElement('canvas');
logcvs.id=a[j];
alert(a[j]);
}
}