Javascript 尝试使用循环的结果并将其记录到控制台

Javascript 尝试使用循环的结果并将其记录到控制台,javascript,jquery,arrays,loops,object,Javascript,Jquery,Arrays,Loops,Object,我创建了一个循环来遍历数组并将结果输出到控制台,但我试图在文件的后面重用循环的结果,但它在控制台中始终显示为未定义,并且不确定我做错了什么?有人能在这个问题上给我一些指导吗。下面是我当前的代码。。。。非常感谢!!:) //从HTML页面获取类名并将其放入数组中 var allClassNames=[]; var finalClassName=“”; $('[class]')。每个(函数(){ $.each($(this.attr('class')).split(''),function(i,cl

我创建了一个循环来遍历数组并将结果输出到控制台,但我试图在文件的后面重用循环的结果,但它在控制台中始终显示为未定义,并且不确定我做错了什么?有人能在这个问题上给我一些指导吗。下面是我当前的代码。。。。非常感谢!!:)

//从HTML页面获取类名并将其放入数组中
var allClassNames=[];
var finalClassName=“”;
$('[class]')。每个(函数(){
$.each($(this.attr('class')).split(''),function(i,className){
if(className.length&$.inArray(className,allClassNames)=-1){
所有className.push(className);
}
});
});
//循环遍历类名并将名称输出到控制台
var arr=所有类名;
对于(变量i=0;i
问题在于此时:

$("." + allClassNames.join(",.")).each(function(){
    console.log( 'className = .' + arr[i] , [$(this).css(['top', 'left', 'width', 'height'])] );
});
i
等于
arr.length
,因为它是在上面的
for(var i…
循环中访问的最后一个值,因此打印的内容超出了arr[]数组的范围

为了说明这一点:

var arr = [0, 1, 2, 3, 4];
for (var i=0; i<arr.length; ++i) {
  // ...
}
console.log(typeof arr[i] == 'undefined') // this will print true, because at this point i == 5 (arr.length)

我认为问题在于您没有在每个循环中声明变量I:

$("." + allClassNames.join(",.")).each(function(){
console.log( 'className = .' + arr[i] , [$(this).css(['top', 'left', 'width', 'height'])] );
});
试试这个:

var i=0

$("." + allClassNames.join(",.")).each(function(){
console.log( 'className = .' + arr[i] , [$(this).css(['top', 'left', 'width', 'height'])] );
i++;
});

正如其他人提到的,您的
i
变量在最后一个循环中是不相关的: 您可以使用此代码解决以下问题:

$("." + allClassNames.join(",.")).each(function(i,v){
    console.log( 'className = .' + arr[i] , [$(v).css(['top', 'left', 'width', 'height'])] );

});

请注意,
这个
现在被
v

所取代。我认为您应该在
$()中使用索引。each()

例如:

// OUTPUT CLASS NAMES AND CSS STYLING TO THE CONSOLE
$("." + allClassNames.join(",.")).each(function(index){
    console.log( 'className = .' + arr[index] , [$(this).css(['top',   'left', 'width', 'height'])] );
});
注意匿名函数中的
index
变量

.each(function(index){
    console.log(index);
});
只需确保将
index
变量放入匿名函数中即可

.each(function(index){
    console.log(index);
});
我希望这能给你一些想法

以下是一些我认为有帮助的链接:


在这行
console.log('className=.+arr[i]
中,您可能想从
每个
函数中获取
i
,但您没有在其中传递任何内容。尝试编写
每个(函数(i,v)
很好,你在回答中很好地解释了这个问题。但是你的答案在哪里?@Sachin正如我在回答中所说的那样,
$(““+allClassNames.join(,”)
将找到的DOM元素与类名数组
arr[]之间没有相关性
这将产生意外的结果,因为这里是
i
是匹配这些类名的DOM元素的索引,而不是类名数组
arr[]
.each(function(index){
    console.log(index);
});