Проблема с вашим кодом в том, что вы возвращаетесь слишком рано.
Каждый раз, когда вы return
из функции, вы выходите из функции, мешая остальной части кода выполняться / выполняться внутри нее.
Итак, поскольку вы return
входите в цикл for, вы останавливаете цикл от любых других проверок.Это означает, что вы должны вернуться после того, как ваш цикл полностью завершен.
Более того, вам также необходимо исправить оператор if
в цикле for.В данный момент вы проверяете, содержит ли передаваемый вами массив (hayStack
) искомый элемент (needle
).Вместо этого вам нужно проверить, является ли текущий элемент (используя haystack[i]
) needle
, тогда, если это так, вам нужно вставить i
(который является текущим индексом) в ваш массив 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
:
const indexOfValue = (n, arr, i) =>
arr.reduce((acc, num, i) => num === n ? [...acc, i] : acc, [])
console.log(indexOfValue(12, [12, 1, 3, 3, 6, 12]));