获取数组中具有多个位置的值的索引

时间:2019-02-17 03:44:41

标签: javascript arrays indexof

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]。请问该特定代码有什么问题,我该如何解决?

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]))