繁体   English   中英

Javascript - 使用递归查找数组元素的索引

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM