Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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 了解查找重复编号和返回第二次出现的最低索引_Javascript_Arrays - Fatal编程技术网

Javascript 了解查找重复编号和返回第二次出现的最低索引

Javascript 了解查找重复编号和返回第二次出现的最低索引,javascript,arrays,Javascript,Arrays,关于在第二次出现具有最小索引的数组中查找第一个重复数的问题 如果我到目前为止理解的话,变量firstDuplicate是一个函数对象,它使用箭头符号缩写为'var firstDuplicate=function(a){}',等等。我的问题从这里开始 1) 创建一个新的集合对象会使用传递函数的数组自动填充?set方法如何知道获取传递给函数的数组并对其进行设置 2) 现在我在for循环中了解到数组中的每个项都在被遍历,当前的索引是e,但从概念上讲,这里我开始丢失正在发生的事情。其中: if (r.h

关于在第二次出现具有最小索引的数组中查找第一个重复数的问题

如果我到目前为止理解的话,变量firstDuplicate是一个函数对象,它使用箭头符号缩写为'var firstDuplicate=function(a){}',等等。我的问题从这里开始

1) 创建一个新的集合对象会使用传递函数的数组自动填充?set方法如何知道获取传递给函数的数组并对其进行设置

2) 现在我在for循环中了解到数组中的每个项都在被遍历,当前的索引是e,但从概念上讲,这里我开始丢失正在发生的事情。其中:

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
并返回该元素。我试图在上面的注释片段中解释它。此外,如上所述,不需要进行任何指数比较。代码只返回它找到的第一个副本(自动地是最小索引)。考虑使用多个杂乱的卡片组来解决这个问题。一旦你发现了一张重复的卡片,你会费心去检查其他的卡片吗?