Javascript 了解查找重复编号和返回第二次出现的最低索引
关于在第二次出现具有最小索引的数组中查找第一个重复数的问题 如果我到目前为止理解的话,变量firstDuplicate是一个函数对象,它使用箭头符号缩写为'var firstDuplicate=function(a){}',等等。我的问题从这里开始 1) 创建一个新的集合对象会使用传递函数的数组自动填充?set方法如何知道获取传递给函数的数组并对其进行设置 2) 现在我在for循环中了解到数组中的每个项都在被遍历,当前的索引是e,但从概念上讲,这里我开始丢失正在发生的事情。其中:Javascript 了解查找重复编号和返回第二次出现的最低索引,javascript,arrays,Javascript,Arrays,关于在第二次出现具有最小索引的数组中查找第一个重复数的问题 如果我到目前为止理解的话,变量firstDuplicate是一个函数对象,它使用箭头符号缩写为'var firstDuplicate=function(a){}',等等。我的问题从这里开始 1) 创建一个新的集合对象会使用传递函数的数组自动填充?set方法如何知道获取传递给函数的数组并对其进行设置 2) 现在我在for循环中了解到数组中的每个项都在被遍历,当前的索引是e,但从概念上讲,这里我开始丢失正在发生的事情。其中: if (r.h
if (r.has(e))
比较到底发生在哪里,即检查此数组中的重复编号,以及确定重复的第二次出现的最低索引的比较
const test1 = [0, 3, 4, 10, 2, 4, 2, 3]
firstDuplicate = a => {
r = new Set()
for (e of a)
if (r.has(e))
return e
else
r.add(e)
return -1
}
console.log(firstDuplicate(test1));
创建一个新的集合对象会使用传递函数的数组自动填充?set方法如何知道获取传递给函数的数组并对其进行设置
这里没有自动发生的事情。当您说r.add(e)
现在我在for循环中了解到数组中的每个项都被遍历,当前索引是e
e
是当前元素,而不是当前索引。您使用的是语句,而不是语句。使用一个简单的代码片段将两者区别开来
const a=[10,5,12];
console.log(“for..in statement”);
用于(a中的常数i){
//这里是索引
控制台日志(i)
};
console.log(“for..of statement”);
用于(a的常数i){
//这里是元素
控制台日志(i)
};代码>
创建一个新的集合对象会使用传递函数的数组自动填充?set方法如何知道获取传递给函数的数组并对其进行设置
这里没有自动发生的事情。当您说r.add(e)
现在我在for循环中了解到数组中的每个项都被遍历,当前索引是e
e
是当前元素,而不是当前索引。您使用的是语句,而不是语句。使用一个简单的代码片段将两者区别开来
const a=[10,5,12];
console.log(“for..in statement”);
用于(a中的常数i){
//这里是索引
控制台日志(i)
};
console.log(“for..of statement”);
用于(a的常数i){
//这里是元素
控制台日志(i)
};代码>谢谢Maaz抽出时间。我正在研究你的解决方案,可能会回来问你一个问题。谢谢。所以我只是改变了我的原始代码,我只是用我认为有效的数据替换了具有不同值的数组。[0,3,4,10,2,4,2,3]如您所见,有三个重复的数字。这返回4。作为4的第二次出现的指数,小于2的第二次出现和3的第二次出现。我的问题是——对于每个e的第一个过程,因为r还没有初始化,所以r是空的,所以对于第一个过程,控制总是直接流到else子句,并填充r。是这样吗?“if(r.has(e))”不应该总是返回true吗?我不明白在代码中,它在哪里比较重复数字的索引,以找到谁的第二个匹配项的索引最小。只有一个过程。因此,只有在集合中找不到元素时,流才会进入else
。否则,它进入if
并返回该元素。我试图在上面的注释片段中解释它。此外,如上所述,不需要进行任何指数比较。代码只返回它找到的第一个副本(自动地是最小索引)。考虑使用多个杂乱的卡片组来解决这个问题。一旦你发现了一张重复的卡片,你会费心去看其他的卡片吗?谢谢你Maaz抽出时间。我正在研究你的解决方案,可能会回来问你一个问题。谢谢。所以我只是改变了我的原始代码,我只是用我认为有效的数据替换了具有不同值的数组。[0,3,4,10,2,4,2,3]如您所见,有三个重复的数字。这返回4。作为4的第二次出现的指数,小于2的第二次出现和3的第二次出现。我的问题是——对于每个e的第一个过程,因为r还没有初始化,所以r是空的,所以对于第一个过程,控制总是直接流到else子句,并填充r。是这样吗?“if(r.has(e))”不应该总是返回true吗?我不明白在代码中,它在哪里比较重复数字的索引,以找到谁的第二个匹配项的索引最小。只有一个过程。因此,只有在集合中找不到元素时,流才会进入else
。否则,它进入if
并返回该元素。我试图在上面的注释片段中解释它。此外,如上所述,不需要进行任何指数比较。代码只返回它找到的第一个副本(自动地是最小索引)。考虑使用多个杂乱的卡片组来解决这个问题。一旦你发现了一张重复的卡片,你会费心去检查其他的卡片吗?