Работа filter на примере одной задаче?

Насколько я правильно понял, интрепретатор спускается к строчке .filter((v) => v тогда, когда map свою работу выполнил. Грубо говоря, filter начинает работать с этим массивом: ‘[“a”, [null, null, [“d”, [null, [“j”]]]]]’
const newChildren = [“a”, [null, null, [“d”, [null, [“j”]]]].filter((v) => v)
return [name, newChildren];
};

Всё правильно вы поняли и данный массив состоит из двух компонентов

[“a”, [null, null, [“d”, [null, [“j”]]]]]

Где первый элемент массива это строка “a”, второй элемент массива - это массив значений [null, null, [“d”, [null, [“j”]]]]

Из этого следует элементов в массиве 2 и ответ на ваш вопрос:

… И почему, функция filter отрабатывает всего 2 раза, а не по количеству элементов, как это и нужно было.

Теперь вернёмся к вопросу:

С этого момента становиться не понятно, что происходит, а именно. После попадание на строчку filter((v) => v) интрепретатор идёт вниз к return и после, возвращается обратно к filter. Почему так происходит? Ведь return, в данном случае, должен был прекратить работу функции?

Как Вы верно заметили с этого момента выполниться следующий код

['a', [null, null, ['d', [null, ['j']]]]].filter((v) => v)

Следуя спецификации метод filter
выполнит данный callback (в нашем случаи callback-ом является функция (v) => v )) для каждого элемента массива (как помним их 2) и в случаи вызов callback-а вернёт значение true , элемент на котором сработал callback будет добавлен в новый массив который возвращает данный метод.
Также следует отметить, что callback, первый аргументом принимает элемент иттерируемого массива.

Рассмотрим вызов callbackа на каждом элементе данного массива:

[
'a',                               // Первый элемент массива
[null, null, ['d', [null, ['j']]]] // Второй элемент массива
].filter((v) => {
  // Первый вызов v в данном случаи это 'a' и функция возвращает логическое true, так как в JS не пустая строка это true
// Второй вызов v - массива, что тоже в JS является логическим true
  return v
})
// Поэтому результатом вызова filter будет новый массив, который в точности такой же как и обрабатываемый до вызова filter:
[
'a',                            
[null, null, ['d', [null, ['j']]]]
]

2 лайка