Good Day,我目前正在寻找一种在任何数组中查找值的所有索引的方法。该值可能在该数组中出现多次。我可以使用.includes
和.indexOf
仅找到第一个位置,类似
function indexOfValue(needle, hayStack) {
if(hayStack.includes(needle)) {
return hayStack.indexOf(needle);
}
}
console.log(indexOfValue(12, [12, 1, 3, 3, 6, 12]));
但这log
仅是针头第一位置的value
。
这就是我试图获取所有index
function indexOfValue(needle, hayStack) {
let result = [];
for(let i = 0; i < hayStack.length; i++) {
if (hayStack.includes(needle)) {
return result.push(hayStack[i]);
}
return result;
}
}
console.log(indexOfValue(12, [12, 1, 3, 3, 6, 12]));
但是上述代码出于某种原因返回1
而不是[0,5]
。请问该特定代码有什么问题,我该如何解决?
答案 0 :(得分:3)
返回result.push
可以缩短迭代时间,甚至不包含索引。而是检查每个元素是否等于针,然后按索引是否相等。
function indexOfValue(needle, hayStack) {
let result = [];
for(let i = 0; i < hayStack.length; i++) {
if (hayStack[i] === needle) { // check if matching
result.push(i); //push the index
}
} return result; //return result at end
}
console.log(indexOfValue(12, [12, 1, 3, 3, 6, 12]))
答案 1 :(得分:2)
您的代码存在问题,就是您返回得太早了。
每次return
使用某个函数时,您都会退出该函数,并停止其余代码在其中执行/运行。
因此,当您return
进入for循环时,您将停止执行其他任何检查。这意味着您应该在循环完成后返回。
此外,您还需要在for循环中修复if
语句。目前,您正在检查传入的数组(hayStack
)是否具有所需的项目(needle
)。相反,您需要检查当前项目(使用haystack[i]
是否为needle
,然后如果需要,则需要将i
(当前索引)推入{{ 1}}数组。
请参见下面的工作示例:
result
如果愿意,还可以使用高阶函数(例如function indexOfValue(needle, hayStack) {
let result = [];
for(let i = 0; i < hayStack.length; i++) { // loop through the array, where `i` is the current index in the array
if (hayStack[i] === needle) { // check if a given number inthe array is the `needle`, if it is:
result.push(i); // add the index of the item to the result array
}
}
return result; // only once the loop is complete return the array
}
console.log(indexOfValue(12, [12, 1, 3, 3, 6, 12]));
)来完成相同的任务:
reduce
答案 2 :(得分:1)
return
循环中问题for
的两个代码示例。第二个示例.push()
将元素设置为result
数组,而不是index
数组。
您可以使用.indexOf()
的第二个参数设置索引以开始搜索,检查.indexOf()
的结果是否大于-1
且索引不在{{ 1}}数组,result
循环后的return
result
数组
for
答案 3 :(得分:1)
const numbers = [11, 3, 6, 8, 11];
const indexOfValue = (val,numbers) =>{
let filtered =[];
numbers.filter((number,index) => {
if(val === number)
filtered = [...filtered,index];
})
return filtered;
}
console.log(indexOfValue(11,numbers));
答案 4 :(得分:0)
遍历整个数组,并为数字索引创建一个数组。像下面一样
function indexOfValue(num,arr){
let indexes = [];
for(let i = 0;i<arr.length;i++){
//checks if the element at index 'i' is "num" then push index 'i' into indexes array
if(arr[i] === num) indexes.push(i);
}
return indexes;
}
console.log(indexOfValue(12, [12, 1, 3, 3, 6, 12]))