定义函数 lastIndexOf?
Defining a function lastIndexOf?
我正在编写教科书。
这是问题:
定义一个函数 lastIndexOf,给定一个数组和一个值,returns 是该值最后一次出现在数组中的索引。如果该值从未出现,函数应该 return -1.
然后在以下方面尝试您的功能:
console.log(lastIndexOf([ 0, 1, 4, 1, 2 ], 1), "=?", 3);
我知道有一个 lastindexof() 方法。就是不知道这个函数怎么实现。
我的问题是,我应该如何解决这个问题?
我是一个小白,但是以你的编程经验,你会怎么考虑这样做呢?你的思考过程是什么?我应该知道什么?
只要从最后一个元素开始,return如果找到您要查找的内容。
最后一个索引为 array.length - 1
。使用经典 for
循环。
祝你学习顺利!
- 从最后一个元素的索引开始(长度为 1)。
- 如果索引 < 0,return -1
- 将索引处的元素与 'needle'
进行比较
- 如果匹配,return索引
- 减少索引并从 #2 开始重复
我会给你一个片段,但这太容易了:)
有很多方法可以实现。
一切取决于你的"creativity"。
我会写其中的 3 个:
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) 反向排序 + "length math":
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);
P.S。在非常大的数组的情况下,这 3 种方法可能不太理想,因为您无法预测您正在寻找的值接近数组的结尾或开头。
所以对于这种情况可以从二叉树算法中得到启发。
一切都取决于任务的复杂性。
Array.prototype.lastIndexOf() 是这样工作的:
var arr = [ 0, 1, 4, 1, 2 ];
console.log(arr.lastIndexOf(1));//<-- we look for 1
console.log(arr.lastIndexOf(5));//<-- we look for 5
//or
console.log([ 0, 1, 4, 1, 2 ].lastIndexOf(1));
已经有一个函数可以调用:
lastIndexOf()
但是你可以自己实现它:
function lastIndex(arr, value) {
let index = -1;
for(let i=0; i < arr.length; i++) {
if(arr[i] === value) {
index = i;
}
}
return index;
}
console.log(lastIndex([1,2,3,3,3,4], 3))
我正在编写教科书。
这是问题:
定义一个函数 lastIndexOf,给定一个数组和一个值,returns 是该值最后一次出现在数组中的索引。如果该值从未出现,函数应该 return -1.
然后在以下方面尝试您的功能:
console.log(lastIndexOf([ 0, 1, 4, 1, 2 ], 1), "=?", 3);
我知道有一个 lastindexof() 方法。就是不知道这个函数怎么实现。
我的问题是,我应该如何解决这个问题?
我是一个小白,但是以你的编程经验,你会怎么考虑这样做呢?你的思考过程是什么?我应该知道什么?
只要从最后一个元素开始,return如果找到您要查找的内容。
最后一个索引为 array.length - 1
。使用经典 for
循环。
祝你学习顺利!
- 从最后一个元素的索引开始(长度为 1)。
- 如果索引 < 0,return -1
- 将索引处的元素与 'needle' 进行比较
- 如果匹配,return索引
- 减少索引并从 #2 开始重复
我会给你一个片段,但这太容易了:)
有很多方法可以实现。
一切取决于你的"creativity"。
我会写其中的 3 个:
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) 反向排序 + "length math":
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);
P.S。在非常大的数组的情况下,这 3 种方法可能不太理想,因为您无法预测您正在寻找的值接近数组的结尾或开头。
所以对于这种情况可以从二叉树算法中得到启发。
一切都取决于任务的复杂性。
Array.prototype.lastIndexOf() 是这样工作的:
var arr = [ 0, 1, 4, 1, 2 ];
console.log(arr.lastIndexOf(1));//<-- we look for 1
console.log(arr.lastIndexOf(5));//<-- we look for 5
//or
console.log([ 0, 1, 4, 1, 2 ].lastIndexOf(1));
已经有一个函数可以调用:
lastIndexOf()
但是你可以自己实现它:
function lastIndex(arr, value) {
let index = -1;
for(let i=0; i < arr.length; i++) {
if(arr[i] === value) {
index = i;
}
}
return index;
}
console.log(lastIndex([1,2,3,3,3,4], 3))