Sobes.tech
Middle+

Υλοποιήστε τη συνάρτηση asyncFilter, η οποία λαμβάνει έναν πίνακα αριθμών και μια ασύγχρονη συνάρτηση προ predicate, και επιστρέφει έναν φιλτραρισμένο πίνακα. Για παράδειγμα, με είσοδο [1, 2, 3] και μια συνάρτηση που αφήνει μόνο τους περιττούς αριθμούς, η έξοδος πρέπει να είναι [1, 3].

sobes.tech AI

Απάντηση από AI

Функция asyncFilter должна последовательно или параллельно применять асинхронный предикат к каждому элементу массива и возвращать новый массив с элементами, для которых предикат вернул true. Вот пример реализации на JavaScript с использованием Promise.all для параллельной обработки:

async function asyncFilter(arr, predicate) {
  const results = await Promise.all(arr.map(predicate));
  return arr.filter((_, index) => results[index]);
}

// Пример использования:
async function isOdd(num) {
  return num % 2 !== 0;
}

asyncFilter([1, 2, 3], isOdd).then(filtered => {
  console.log(filtered); // [1, 3]
});

Здесь мы сначала запускаем предикат для всех элементов, ждём результатов, а затем фильтруем исходный массив по полученным булевым значениям.