[英]Javascript - Find Index of array element using recursion
我是使用递归的新手,所以我只想知道,如果我想知道数组元素的索引,使用递归(Javascript)。 这是正确的方法,还是有更好的方法?
let arr = [1, 2, 3, 4]
function search(arr, item) {
const searchIndex = (array, elem, index = 0) => {
if (array.length === 0) return -1
if (array[0] === elem) return index
return searchIndex(array.slice(1), elem, ++index)
}
return searchIndex(arr, item)
}
console.log(search(arr, 4)) // output should be 3
您可以稍微更改 arguments 并添加索引并移交完整的数组。
function search(array, item, i = 0) { if (i >= array.length) return -1; if (array[i] === item) return i; return search(array, item, i + 1) } let arr = [1, 2, 3, 4]; console.log(search(arr, 4)) // 3 console.log(search(arr, 8)) // -1 console.log(search([], 4)) // -1
为什么不使用Array.prototype.indexOf()
?
在这里查看更多
indexOf() 方法返回可以在数组中找到给定元素的第一个索引,如果不存在则返回 -1。
let arr = [1, 2, 3, 4] console.log(arr.indexOf(4))
您的方法在几个层面上是不正确的:
yourarray.indexOf(youritem)
已经在做你需要的。
编码时递归是一种可能的选择,但在考虑使用递归时,您应该绝对确定需要递归。 它往往会使您的代码过于复杂,并且由于每个 function 调用都存储在称为堆栈的 memory 部分中,因此您最终可能会遇到堆栈溢出错误(没有双关语)。
如果您想手动执行此操作,则可以执行以下操作:
function findIndex(array, item) {
for (let index = 0; index < array.length; index++) {
if (array[index] === item) return index;
}
return -1;
}
当您需要对您的功能进行任何修改时,您将遇到麻烦。 您的代码需要尽可能清晰。
如果你重新实现一个已经存在的功能,你需要进行许多压力测试来确定你的实现是否至少和原来的一样好。
一个递归解决方案,只是为了好玩,但不要在现实生活中使用它:
function findIndex(array, item, index) {
if (index === array.length) return -1;
else if (array[index] === item) return index;
else return findIndex(array, item, index + 1);
}
const arr = ['1', '2', '3','4']
const index = arr.indexOf('4');
console.log(index)
//index is `3`
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.