Всем привет! Я сталкиваюсь с проблемой в работе условия <code>else</code> и не могу понять, почему оно не функционирует так, как мне нужно. У меня есть массив <code>arrayAucFOB</code> со следующей структурой: <pre><code class="javascript">var arrayAucFOB = [
[
'AICHI AA',
'40000'
],
[
'ARAI BAYSIDE',
'40000'
],
[
'ARAI OYAMA',
'48000'
],
[
'ARAI SENDAI',
'48000'
],</code></pre> <br/> В своем коде я извлекаю название со страницы и ищу его в этом массиве, чтобы получить соответствующее числовое значение. Однако, если элемент не найден, я не могу корректно подставить своё число. Вот результат моего кода: <br/>
Понимаю вашу проблему. Давайте рассмотрим ваш код и найдём возможные ошибки, особенно в условии `else`. Ваша задача - найти элемент в массиве и вернуть соответствующее числовое значение, а в случае, если элемент не найден, подставить другое число.
Вот пример кода, который выполняет такую задачу.
```javascript
var arrayAucFOB = [
['AICHI AA', '40000'],
['ARAI BAYSIDE', '40000'],
['ARAI OYAMA', '48000'],
['ARAI SENDAI', '48000']
];
var searchTerm = 'ARAI BAYSIDE'; // Название, которое ищем
var foundValue = null; // Переменная для хранения найденного значения
var defaultValue = '50000'; // Значение по умолчанию, если элемент не найден
for (var i = 0; i < arrayAucFOB.length; i++) {
if (arrayAucFOB[i][0] === searchTerm) {
foundValue = arrayAucFOB[i][1]; // Если нашли, сохраняем соответствующее значение
break; // Выходим из цикла, так как нужное значение найдено
}
}
if (foundValue === null) {
foundValue = defaultValue; // Если не нашли элемент, подставляем значение по умолчанию
}
console.log('Найденное значение:', foundValue);
```
В этом коде мы:
1. Инициализируем переменную `foundValue` как `null`, чтобы проверить, было ли найдено значение.
2. Проходим через каждый элемент вашего массива `arrayAucFOB` и проверяем, совпадает ли название с `searchTerm`.
3. Если совпадение найдено, сохраняем соответствующее значение в `foundValue` и выходим из цикла с помощью `break`.
4. После цикла проверяем, оставлено ли значение `foundValue` как `null`. Если да, то устанавливаем его равным значению по умолчанию.
Таким образом, если искомый элемент не найден в массиве, вы получите `defaultValue`. Если у вас есть какие-то конкретные ошибки или недочеты в вашем текущем коде, пожалуйста, поделитесь им, и я помогу более детально!
Проблема в вашем коде заключается в том, как вы используете else внутри цикла. Если элемент в массиве arrayAucFOB не совпадает с текущим значением aucName на конкретной итерации, вы сразу же присваиваете FOB = "99999". Это не учитывает возможность того, что правильное значение может быть найдено на следующих итерациях цикла. <br/> <br/> Исправление <br/> Вам нужно переместить логику присвоения значения по умолчанию (99999) за пределы цикла, чтобы она выполнялась только в том случае, если совпадение не было найдено во всем массиве. Для этого можно использовать флаг или просто предусмотреть присвоение значения по умолчанию перед началом цикла. <br/> <br/> Исправленный код: <br/> <br/> javascript <br/> Копировать код <br/> for (let i = 0; i < listTr.length; i++) { <br/> if (listTr[i].querySelector(".ffix_time") !== null) { <br/> let aucName = listTr[i].querySelector(".ffix_time").children[2].textContent.toUpperCase(); <br/> console.log(aucName); <br/> <br/> // Значение по умолчанию <br/> FOB = "99999"; <br/> <br/> for (let k = 0; k < arrayAucFOB.length; k++) { <br/> if (arrayAucFOB[k][0] === aucName) { <br/> FOB = arrayAucFOB[k][1]; <br/> break; // Если нашли совпадение, прерываем цикл <br/> } <br/> } <br/> <br/> console.log(FOB); <br/> } <br/> } <br/> Объяснение изменений: <br/> Инициализация FOB: <br/> <br/> Перед началом цикла for для arrayAucFOB присваиваем значение по умолчанию (99999). <br/> Условие if и break: <br/> <br/> Если найдено совпадение, присваиваем FOB нужное значение и прерываем цикл с помощью break. Это предотвращает дальнейшую проверку ненужных элементов массива. <br/> Логика присвоения значения по умолчанию: <br/> <br/> Если в массиве не найдено совпадение, значение FOB остается равным 99999. <br/> Как это работает: <br/> На каждой итерации внешнего цикла проверяется aucName. <br/> Для каждого aucName осуществляется поиск в arrayAucFOB. <br/> Если совпадение найдено, присваивается соответствующее значение из массива. <br/> Если совпадение не найдено (цикл завершился, а совпадения не было), FOB остается равным значению по умолчанию. <br/> Пример вывода: <br/> Для массива: <br/> <br/> javascript <br/> Копировать код <br/> var arrayAucFOB = [ <br/> ['AICHI AA', '40000'], <br/> ['ARAI BAYSIDE', '40000'], <br/> ['ARAI OYAMA', '48000'], <br/> ['ARAI SENDAI', '48000'] <br/> ]; <br/> И для элемента HONDA AA TOKYO, который отсутствует в массиве, вывод в консоль будет: <br/> <br/> Копировать код <br/> HONDA AA TOKYO <br/> 99999 <br/> Для элемента ARAI OYAMA: <br/> <br/> Копировать код <br/> ARAI OYAMA <br/> 48000