我正在写教科书。

这是问题:

定义一个函数lastIndexOf,给定一个数组和一个值,该函数返回该值最后一次出现在数组中的索引。如果该值永远不会出现,则该函数应返回-1。

然后,尝试以下功能:

console.log(lastIndexOf([0,1,4,1,2],1),“ =?”,3);

我知道有一个lastindexof()方法。我只是不知道如何在此功能中实现它。

我的问题是,我该如何解决?

我是一个新手学生,但是根据您的编程经验,您将如何考虑这样做?您的思考过程如何?我应该知道些什么?

最佳答案

有很多方法可以实现它。

一切都取决于您的“创造力”。



我将写其中的三个:

1)一直循环直到最后一场比赛:



const lastIndexOf = (haystack, needle) => {
  let index = -1;
  haystack.forEach(function(element, i) {
    if (element === needle) index = i;
  });
  return index;
}


let fruits = ['apple', 'mango', 'pear', 'strawberry', 'bananas', 'mango', 'cherry']

console.log('Index of:', fruits.indexOf('mango'));
console.log('Last Index of:', lastIndexOf(fruits, 'mango'));
console.log('Last Index of:', lastIndexOf(fruits, 'potato'));

console.log(lastIndexOf([ 0, 1, 4, 1, 2 ], 1), "=?", 3);





2)使用-1 step循环并在第一次比赛时停止:



const lastIndexOf = (haystack, needle) => {
  for (let i = haystack.length -1; i >= 0; i--) {
    if (haystack[i] === needle) return i;
  }
  return -1;
}


let fruits = ['apple', 'mango', 'pear', 'strawberry', 'bananas', 'mango', 'cherry']

console.log('Index of:', fruits.indexOf('mango'));
console.log('Last Index of:', lastIndexOf(fruits, 'mango'));
console.log('Last Index of:', lastIndexOf(fruits, 'potato'));

console.log(lastIndexOf([ 0, 1, 4, 1, 2 ], 1), "=?", 3);





3)反向排序+“长度数学”:



const lastIndexOf = (haystack, needle) => {
  const rIndex = haystack.reverse().indexOf(needle);
  return (rIndex > -1) ? haystack.length - rIndex - 1 : -1;
}


let fruits = ['apple', 'mango', 'pear', 'strawberry', 'bananas', 'mango', 'cherry']

console.log('Index of:', fruits.indexOf('mango'));
console.log('Last Index of:', lastIndexOf(fruits, 'mango'));
console.log('Last Index of:', lastIndexOf(fruits, 'potato'));

console.log(lastIndexOf([ 0, 1, 4, 1, 2 ], 1), "=?", 3);







附言在数组很大的情况下,这三种方法可能不太理想,因为您无法预测所要查找的值接近数组的结尾或开头。

因此,在这种情况下,您可以从二叉树算法中获得启发。

一切都取决于任务的复杂性。

关于javascript - 定义函数lastIndexOf?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51804254/

10-12 02:23