Как пропустить элементы в массиве, если значение равно 0

Скажем, у меня есть массив оценок:

const scores = [20, 0, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120]; 

По умолчанию я показываю оценку текущего месяца (scores[0]) и оценку предыдущего месяца (scores[1]).

Если предыдущий месяц 0, я хочу отобразить последний индекс со значением, отличным от нуля. (scores[2] в данном случае). Это означает, что у нас есть значения 0 от индекса 1 до 8, я хочу отобразить индекс 9 как результат предыдущего месяца.

for (let i = 0; i < scores.length; i++) {
  if (scores[i] === 0) {
    // At this point I want to skip to the next index.
    // If the next index is also zero, I skip till I get an index with a value
  }
}
while ( scores[i] === 0 ) i++;
epascarello 24.01.2023 16:28

Каков ожидаемый результат?

epascarello 24.01.2023 16:29
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
2
61
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Вы можете использовать Array#find, чтобы получить первый ненулевой элемент.

let res = scores.find((x, i) => i && x !== 0);
Ответ принят как подходящий

Вам просто нужно использовать оператор continue, вот так:

const scores = [20, 0, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120]; 
for (let i = 0; i < scores.length; i++) {
    if (scores[i] === 0) {
        continue;
    }
    // do stuff
}

Вы должны использовать continue, который в основном переходит к следующей итерации, поэтому ваш код будет выглядеть примерно так:

for (let i = 0; i < scores.length; i++) {
  if (scores[i] === 0) {
    continue;
  }
}

Если вы хотите получить первое ненулевое значение, просто найдите первый индекс, начинающийся с 0. После того, как вы найдете это значение, найдите следующее значение, следующее за этим индексом.

const fromIndex = (callbackFn, fromIndex) =>
  (element, index, array) =>
    index >= fromIndex && callbackFn(element, index, array);

const getBreakdown = (scores, criteria) => {
  const currentIndex = scores.findIndex(criteria);
  const previousIndex = scores.findIndex(fromIndex(criteria, currentIndex + 1));
  return {
    current: scores[currentIndex],
    previous: scores[previousIndex],
  };
};

const
  scores = [20, 0, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120],
  breakdown = getBreakdown(scores, (score) => score > 0);

console.info(breakdown);

Кроме того, вы всегда можете отфильтровать ненулевые значения:

const getBreakdown = (scores, criteria) => {
  const [current, previous] = scores.filter(criteria);
  return { current, previous };
};

const
  scores = [20, 0, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120],
  breakdown = getBreakdown(scores, (score) => score > 0);

console.info(breakdown);

Другие вопросы по теме