Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在2个数组之间关联项_Javascript_Jquery_Arrays - Fatal编程技术网

Javascript 在2个数组之间关联项

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

编辑: 这可能很容易,但我正努力做到这一点。如何在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.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]);
    }
}