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 如何使用for循环返回数组中第一次出现的重复项?_Javascript_Arrays_For Loop - Fatal编程技术网

Javascript 如何使用for循环返回数组中第一次出现的重复项?

Javascript 如何使用for循环返回数组中第一次出现的重复项?,javascript,arrays,for-loop,Javascript,Arrays,For Loop,我正在尝试用数组和数据结构构建逻辑。我正在尝试使用for循环实现逻辑 function getRepeatingNumber(arr) { for (var i = 0; i < arr.length; i++) { for (var j = i + 1; j < arr.length; j++) { if (arr[i] === arr[j]) { return arr[i]; } } } return unde

我正在尝试用数组和数据结构构建逻辑。我正在尝试使用for循环实现逻辑

function getRepeatingNumber(arr) {

  for (var i = 0; i < arr.length; i++) {
    for (var j = i + 1; j < arr.length; j++) {
      if (arr[i] === arr[j]) {
        return arr[i];
      }
    }
  }
  return undefined;
}
getRepeatingNumber([2, 3, 6, 5, 2]);
函数getRepeatingNumber(arr){ 对于(变量i=0;i 上述函数接受数组并返回数组中的重复项,因此在上述情况下,它将返回2。但是如果我有一个类似于arr[2,3,3,6,5,2]的数组,在这种情况下它应该返回3,但是由于外循环的索引[0]是2作为参考,它将返回2作为答案


如何实现返回重复项第一次出现的函数。

i
之后的部分中,不要用
j
迭代,而是迭代
i
之前的部分:

函数getRepeatingNumber(arr){ 对于(变量i=1;ilog(getRepeatingNumber([2,3,3,6,5,2])您需要一个数据结构来跟踪第一个出现的索引

我的建议是使用数组来存储重复数字的所有索引。按升序对数组排序,并返回数组中第一个索引处的项

函数getRepeatingNumber(arr){ var resultindexharr=[]; var计数=0; var标志=0;
对于(var i=0;i作为一名javascript开发人员,您应该熟悉函数编程和高阶函数,因此请查看文档以进一步了解一些有用的函数:如
filter
-
find
-
reduce
-
findIndex
map

现在回答你的问题:

首先,你应该分步思考:

  • 获取数组中某项的匹配项作为函数:
const arr=[2,5,6,2,4,5,6,8,2,5,2]
const res=arr.reduce((货币数量,项目)=>{
如果(项目==2)
号码++
返回号码OCC
}, 0);
log(`result without function${res}`);
/*所以我的功能是*/
const occurrencefun=(num,arr)=>{
返回arr.reduce((编号OCC,项目)=>{
如果(项===num)
号码++
返回号码OCC
}, 0);
}

log(`result using my function${occurrencefun(2,arr)}`);
因此您必须更改逻辑,使其不会在第一次匹配时退出创建“内存”到目前为止,在您看到的所有项目中,每次迭代都会使用该内存检查该项目是否已被看到,如果未添加到内存中,则在该时间退出/返回循环。我首先决定,如果该项目与下一个条目不匹配,则将该项目推入空数组,但如果已推入数组的项目已关闭,则会卡住该项目d在输入数组的末尾进行匹配。干得好!在你弄错之前已经做了很多;-)请注意,
if(flag==0)
是不必要的,因为这是剩下的唯一可能性(当执行到达那里时总是正确的)一个问题:
sort
将按字母顺序排序,但您需要一个数字排序。看看这个,谢谢您的回答,但您不认为我们正在加大难度并增加代码来解决这个问题。创建一个数据结构来存储项,然后排序以返回项,这样我们就可以轻松地在项中循环并返回第一次出现。我是通过创建一个新的数据结构和存储值来考虑这个问题的,但是我会记住时间和空间的复杂性来解决问题。我在编码和数据结构方面很新,所以还在学习。谢谢@trincot的输入,我会在参考相关链接后编辑我的答案。@jsLearner:你是对的,这个解决方案的复杂性是:
n2
,而不是首选解决方案。我想分享一个更接近你试图解决的问题的解决方案。首选解决方案应该是@trincot共享的众多解决方案之一。它们需要更少的代码,而且性能更好。哦,天啊,哈哈,是的,但我觉得写lol很酷,我将删除thatG.aziz…抱歉,文档链接不起作用更新后,我将删除我的答案,因为我认为它无法回答您的问题