Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/444.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
如何在array[i]=i的数组JavaScript中查找元素?_Javascript_Arrays_Sorting_Recursion_Binary Search - Fatal编程技术网

如何在array[i]=i的数组JavaScript中查找元素?

如何在array[i]=i的数组JavaScript中查找元素?,javascript,arrays,sorting,recursion,binary-search,Javascript,Arrays,Sorting,Recursion,Binary Search,我需要在arr[I]==I的数字数组中查找元素,这意味着元素必须等于数组索引。 必须使用递归来找到它们,而不仅仅是循环。 如果有人帮忙,我会非常感激,因为我已经花了很多时间,什么都做不了。 我尝试过使用二进制搜索,但不起作用。最后我只得到了空数组 函数固定点搜索arr,低,高{ 让middle=Math.floorhigh-low/2; console.log低、高、中 设arrRes=[]; 如果arr[middle]==middle {arrRes.pusharr[中间];} 否则,如果a

我需要在arr[I]==I的数字数组中查找元素,这意味着元素必须等于数组索引。 必须使用递归来找到它们,而不仅仅是循环。 如果有人帮忙,我会非常感激,因为我已经花了很多时间,什么都做不了。 我尝试过使用二进制搜索,但不起作用。最后我只得到了空数组

函数固定点搜索arr,低,高{ 让middle=Math.floorhigh-low/2; console.log低、高、中 设arrRes=[]; 如果arr[middle]==middle {arrRes.pusharr[中间];} 否则,如果arr[middle]>middle {fixedPointSearcharr,中+1,高;} 其他的 {定点搜索arr,低,中-1;} 返回arres; } 常数arr1=[-10,-3,2,3,6,7,8,9,10,12,16,17];
console.logfixedPointSearcharr1,0,arr1.length-1 如果要查找所有元素,应该从数组的开头开始,而不是从中间开始,然后遍历所有索引

递归的思想是定义结束条件

然后检查arr[i]==i以更新结果数组

然后使用递增的索引和更新的结果数组进行递归调用

函数fixedpointsearr,i,results{ //递归的结束条件 如果i==arr.length-1 | | arr.length==0{ 返回结果; } 如果arr[i]==i{ 结果:普希; } //递归调用 返回fixedPointSearcharr,i+1,结果; } 常数arr1=[-10,-3,2,3,6,7,8,9,10,12,16,17]; console.logfixedpointsearr1,0,[]; console.logfixedPointSearch[],0,[];
logfixedPointSearch[9,8,7],0,[] 如果要查找所有元素,应该从数组的开头开始,而不是从中间开始,然后遍历所有索引

递归的思想是定义结束条件

然后检查arr[i]==i以更新结果数组

然后使用递增的索引和更新的结果数组进行递归调用

函数fixedpointsearr,i,results{ //递归的结束条件 如果i==arr.length-1 | | arr.length==0{ 返回结果; } 如果arr[i]==i{ 结果:普希; } //递归调用 返回fixedPointSearcharr,i+1,结果; } 常数arr1=[-10,-3,2,3,6,7,8,9,10,12,16,17]; console.logfixedpointsearr1,0,[]; console.logfixedPointSearch[],0,[];
logfixedPointSearch[9,8,7],0,[] 我不知道你为什么要通过递归来实现它:- 但无论如何,以下内容应该对您有所帮助:-

let ans = [];

function find(arr,index,ans)
{
  if(index==arr.length-1)
    {
      if(arr[index]==index){
        ans.push(arr[index])
    }
    return;
}
  if(arr[index]==index){
      ans.push(arr[index])
}
  find(arr,index+1,ans);
}
const arr1 = [-10, -3, 2, 3, 6, 7, 8, 9, 10, 12, 16, 17];
find(arr1,0,ans);
console.log(ans);

我不知道你为什么要通过递归来实现它:- 但无论如何,以下内容应该对您有所帮助:-

let ans = [];

function find(arr,index,ans)
{
  if(index==arr.length-1)
    {
      if(arr[index]==index){
        ans.push(arr[index])
    }
    return;
}
  if(arr[index]==index){
      ans.push(arr[index])
}
  find(arr,index+1,ans);
}
const arr1 = [-10, -3, 2, 3, 6, 7, 8, 9, 10, 12, 16, 17];
find(arr1,0,ans);
console.log(ans);

对于递归,需要一个结束条件。差不多

常量findelementValueisPositionArray=arr=>{ 让结果=[]; const find=i=>{ 如果arr.length{//只要arr有值 const value=arr.shift;//获取值 结果=i===值//检查它 ?results.concatvalue :结果; 返回findi+1;//使用递增的i值重做 } 返回结果; }; 返回find0; } logfindelementValueisPositionArray[2,3,4,3,9,8].join; logfindelementValueisPositionArray[2,3,4,91,9,8].join; console.logfindelementValueisPositionArray[0,1,2,87,0,5]。加入;
.as控制台包装器{top:0;max height:100%!important;}对于递归,需要一个结束条件。差不多

常量findelementValueisPositionArray=arr=>{ 让结果=[]; const find=i=>{ 如果arr.length{//只要arr有值 const value=arr.shift;//获取值 结果=i===值//检查它 ?results.concatvalue :结果; 返回findi+1;//使用递增的i值重做 } 返回结果; }; 返回find0; } logfindelementValueisPositionArray[2,3,4,3,9,8].join; logfindelementValueisPositionArray[2,3,4,91,9,8].join; console.logfindelementValueisPositionArray[0,1,2,87,0,5]。加入;
.作为控制台包装{top:0;max height:100%!important;}您可以通过在每个步骤中缩短数组来解决此问题,而不需要额外的临时数组和参数:

常量myArray=[0,5,2,4,7,9,6]; 函数固定点搜索阵列测试{ 如果arrayToTest.length==0{ 返回[]; } const lastIndex=arrayToTest.length-1; const lastItem=arrayToTest[lastIndex]; 常量remainingItems=arrayToTest.0,lastIndex; return lastItem==lastIndex ?[…fixedPointSearchremainingItems,lastItem] :固定点搜索保留项目; }
console.logfixedPointSearchmyArray 您可以通过在每个步骤中缩短阵列来解决此问题,而不需要额外的临时阵列和参数:

常量myArray=[0,5,2,4,7,9,6]; 函数固定点搜索阵列测试{ 我 f arrayToTest.length==0{ 返回[]; } const lastIndex=arrayToTest.length-1; const lastItem=arrayToTest[lastIndex]; 常量remainingItems=arrayToTest.0,lastIndex; return lastItem==lastIndex ? […fixedPointSearchremainingItems,lastItem] :固定点搜索保留项目; }
console.logfixedPointSearchmyArray JavaScript中的惯用解决方案使用Array.prototype.filter-

常量运行=a=[]=> a、 过滤器x,i=>x==i console.logrun[0,1,2,3,4,5]/[0,1,2,3,4,5] console.logrun[3,3,3,3,3]/[3] console.logrun[7,1,7,3,7,5]/[1,3,5]
logrun[9,9,9,9,9]/[]JavaScript中的惯用解决方案使用Array.prototype.filter-

常量运行=a=[]=> a、 过滤器x,i=>x==i console.logrun[0,1,2,3,4,5]/[0,1,2,3,4,5] console.logrun[3,3,3,3,3]/[3] console.logrun[7,1,7,3,7,5]/[1,3,5]
logrun[9,9,9,9,9]/[]要递归执行此操作,您可能希望在越来越小的数组上递归,但这意味着您还需要更新每次调用时检查的索引。最简单的方法之一就是在函数的参数中包含一个索引,并在每次递归调用时递增它。这是一种方法:

常量fixedPointSearch=[x,…xs]=[],索引=0=> x==未定义 ? [] :[…x==索引?[x]:[],…固定点搜索xs,索引+1] 控制台日志 固定点搜索[-10,-3,2,3,6,7,8,9,10,12,16,17]
要递归地执行此操作,您可能希望在越来越小的数组上递归,但这意味着您还需要更新每次调用时检查的索引。最简单的方法之一就是在函数的参数中包含一个索引,并在每次递归调用时递增它。这是一种方法:

常量fixedPointSearch=[x,…xs]=[],索引=0=> x==未定义 ? [] :[…x==索引?[x]:[],…固定点搜索xs,索引+1] 控制台日志 固定点搜索[-10,-3,2,3,6,7,8,9,10,12,16,17]
你想找到所有与其索引匹配的元素,还是只找到一个?为什么这里需要递归?如果要查找[i]==i的所有元素,则可以简单地使用此条件筛选初始数组。@KirillSimonov作业?当数组未排序时,二进制搜索没有意义。如果你需要返回多个单独的元素sar.filterx,i=>x==我应该做一些技巧你想找到所有与索引匹配的元素还是只找到一个?为什么这里需要递归?如果要查找[i]==i的所有元素,则可以简单地使用此条件筛选初始数组。@KirillSimonov作业?当数组未排序时,二进制搜索没有意义。如果你需要返回多个单独的元素,那就没有意义了。过滤x,i=>x==我应该这样做,trickIt可能被否决了,因为它是错误的,不起作用。ans变量被隐藏。更新全局变量是错误的,并且函数不返回任何内容,因此对该函数的多次调用将产生错误的输出。松散的比较允许返回类似于['0']的内容,或者更糟的是[false,true,true],这就是作者要求严格平等的原因。它为空数组抛出一个错误。而且它的编写风格很差,不容易阅读和理解,也没有提供任何解释。看起来一点也不不不公平,我明白了。我认为这是建设性的批评。谢谢:。花点时间解释你的答案,不要只贴代码。此外,还应尝试使用良好的编码风格,以便其他人能够轻松阅读您的代码,例如,您可以在关键字和运算符之间使用空格。花点时间学习javascript的基础知识和最佳实践。它可能会被否决,因为它是错误的,不起作用。ans变量被隐藏。更新全局变量是错误的,并且函数不返回任何内容,因此对该函数的多次调用将产生错误的输出。松散的比较允许返回类似于['0']的内容,或者更糟的是[false,true,true],这就是作者要求严格平等的原因。它为空数组抛出一个错误。而且它的编写风格很差,不容易阅读和理解,也没有提供任何解释。看起来一点也不不不公平,我明白了。我认为这是建设性的批评。谢谢:。花点时间解释你的答案,不要只贴代码。此外,还应尝试使用良好的编码风格,以便其他人能够轻松阅读您的代码,例如,您可以在关键字和运算符之间使用空格。花点时间学习javascript Wow的基本知识和最佳实践。。。什么是x?x的复数形式:我通常用x表示未知类型的项,用xs表示它们的集合。但是,既然这些都是数字,我真的应该用n和ns。
但在这两种情况下,像[n,…ns]这样的参数表示一个数组,其中n表示第一项,ns表示一个数组,其余项表示一个数组。当在数组上递归时,这是非常有用的。。。过滤器可以使用reduce或flatMap实现。谢谢斯科特:D@Thankyou当前位置我也没有连接,但是可以。我已经用过这个概念了-哇!什么是x?x的复数形式:我通常用x表示未知类型的项,用xs表示它们的集合。但是,既然这些都是数字,我真的应该用n和ns。但在这两种情况下,像[n,…ns]这样的参数表示一个数组,其中n表示第一项,ns表示一个数组,其余项表示一个数组。当在数组上递归时,这是非常有用的。。。过滤器可以使用reduce或flatMap实现。谢谢斯科特:D@Thankyou当前位置我也没有连接,但是可以。我已经用过这个概念了-