Задать вопрос
nastya97core
@nastya97core
Начинающий программист

Как проверить в начале весь массив на одно условие, а потом на другое?

Здравствуйте. У меня есть несколько массивов данных. К примеру такого вида:
["значение": "asdlkfjhasjd", "значение": "Яблоко", "значение": "adfkljahsdj", "значение": "Банан",]

В массиве может быть только Банан, либо только Яблоко, либо Банан и Яблоко, либо вообще ничего. Я перебираю массив через forEach. Мне нужен Банан, но если Банана нет, то мне нужно Яблоко. По сути мне бы подошло условие:
if (значение == Банан) {...} else if (значение == Яблоко) {...}
, но проблема в том, что Банан может быть в конце массива, но скрипт проверяет значение и видит, что Яблоко подходит и возвращает мне Яблоко. А в приоритете всегда у меня Банан. Как бы сделать так, чтобы в случае, если в массиве есть Банан, то он бы и возвращался? Но если банана нет, то искалось бы Яблоко.

И пока я писала этот вопрос, меня начал смущать момент того, что массив будет перебираться 2 раза. А он довольно большой... Как бы ещё в один перебор уместиться?
  • Вопрос задан
  • 184 просмотра
Подписаться 2 Простой 4 комментария
Ответ пользователя eRKa К ответам на вопрос (3)
@kttotto
пофиг на чем писать
На коленке, первое, что в голову пришло. Не проверял, но, думаю, смысл понятен.
const source = [ grape, plum, banana, apple ];
const required = [banan, apple];  // То, что ищем в порядке приоритета
const found = [];  // Сюда складываем то, что нашли в массиве

let result = null;

for(let fruit of source) {
    if(required[0] === fruit) {
        result = fruit;
        return;
    }

    if(required.some(d => d === fruit) {
        found.push(fruit);
    }
}

for(let item of required) {
    if(found.some(f => f === item)) {
        result = item;
        return;
    }
}
Ответ написан
Комментировать