Вы также можете использовать метод массива findIndex
, который, мы не должны удивляться, узнав, что он находит индекс в массиве при определенном условии.
const sum = (ns) =>
ns .reduce ((total, n) => total + n, 0)
const findBalancedIndex = (ns) =>
ns .findIndex ((_, i) => sum (ns.slice (0, i)) === sum (ns.slice (i + 1)))
console .log (findBalancedIndex ([1, 2, 3, 4, 3, 2, 1]))
console .log (findBalancedIndex ([1, 100, 50, -51, 1, 1]))
console .log (findBalancedIndex ([1, 2, 3, 4, 5, 6]))
Здесь мы включаем простую вспомогательную функцию для нахождения суммы массива, а затем мы передаем функцию findIndex
, которая использует ее дважды для элементов перед индексом и тех, кто после него. Для этого мы используем второй параметр функции обратного вызова, index
. Это означает, что мы полностью пропускаем первый параметр и вместо того, чтобы называть его чем-то вроде n
, мы используем несколько общепринятое соглашение о его вызове _
, указывая на заполнитель, который мы не будем использовать. Обратите внимание, что вам не нужно вычитать единицу из правой границы slice
, поскольку это граничное значение уже исключено. И, конечно же, другие указали, что вам нужно разрезать индекс, а не значение массива в этом индексе.
Это находит первый правильный индекс. Если вы хотите найти все таких индексов, вам придется использовать другой метод. (То, что возможно иметь более одного, должно быть ясно из таких массивов, как [1, 2, 3, 0, 0, 0, 0, 3, 2, 1]
- индексы для всех этих 0
будут работать.)