Использование Javascript для фильтрации выходов функций только до тех пор, пока они истинны (алгоритм Javascript) - PullRequest
0 голосов
/ 24 апреля 2020

Вопрос

Учитывая массив arr, проходите и удаляйте каждый элемент, начиная с первого элемента (индекс 0), пока функция fun c не вернет true, когда повторяющийся элемент

Затем верните остаток массива, как только условие будет выполнено, в противном случае arr должен быть возвращен как пустой массив.

Это то, что я пробовал

function dropElements(arr, func) {
  let filteredArray = arr.filter((item) => {
    return func(arr[item]) == true;
  })

  if (filteredArray == true) {
    return filteredArray;
  } else {
    return [];
  }
}

console.log(dropElements([1, 2, 3, 4], function(n) {
  return n > 5;
}));

console.log(dropElements([1, 2, 3, 4], function(n) {
  return n >= 3;
}))

1 Ответ

3 голосов
/ 24 апреля 2020

Если вы хотите использовать filter, установите флаг, который переключается при возникновении условия, и возвращайте true, если флаг переключен:

function dropElements(arr, func) {
  let found = false;
  return arr.filter((item) => {
    if (found) return true;
    if (func(item)) {
      found = true;
      return true;
    }
  });
}

console.log(dropElements([1, 2, 3, 4], function(n) {
  return n > 5;
}));


console.log(dropElements([1, 2, 3, 4], function(n) {
  return n >= 3;
}))

Я думаю, что findIndex с последующим slice было бы более уместным, хотя:

function dropElements(arr, func) {
  const startAtIndex = arr.findIndex(func);
  return startAtIndex === -1
    ? []
    : arr.slice(startAtIndex);
}

console.log(dropElements([1, 2, 3, 4], function(n) {
  return n > 5;
}));


console.log(dropElements([1, 2, 3, 4], function(n) {
  return n >= 3;
}))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...