Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 15.04.2013, 22:54
Интересующийся
Отправить личное сообщение для Batska Посмотреть профиль Найти все сообщения от Batska
 
Регистрация: 02.02.2013
Сообщений: 21

Ошибка в цикле
Товарищи javascript'еры, помогите новичку, пожалуйста.

var elemNumber;
	var numberStr;
	var subs = 'Ель2Сосна';
	if (typeof subs.substring(0,1)*1 == 'number') {
	firstNumber = subs.substring(0,1)*1;
	}
	
var table = {
    'Ель': 13,
    'Сосна': 2223,
    'Береза': 122,
    'Дуб': 2687
}

var arr = subs.match(/[А-ЯЁA-Z][а-яёa-z]+/g),
      i = arr.length;
      alert (arr[0]);
      alert (subs.substring(subs.indexOf(arr[0]) + arr[0].length, subs.indexOf(arr[0]) + arr[0].length+1)); // проверка на работоспособность
for (i=0;  i < arr.length + 1; i++) {
if (typeof subs.substring((subs.indexOf(arr[i]) + arr[i].length, subs.indexOf(arr[i]) + arr[i].length+1)*1) == 'number') {
table[arr[i]] = table[arr[i]]*subs.substring((subs.indexOf(arr[i]) + arr[i].length - 1, subs.indexOf(arr[i]) + arr[i].length)*1);
}
}
alert (table[arr[i]]);

alert (table[arr[0]]);


Программа должна распознавать элементы массива в строке, введенной пользователем, после чего изменять значения элементов массива (цифры), умножая, если есть число после введенного элемента массива, на это число.
К примеру, есть в массиве 'Береза': 122 и т.д.
Пользователь ввел строку "Береза2ДубСосна"
Значение 'Буреза' должно измениться с 122 на 244, значения Дуба и сосны должны остаться старыми.

Я написал цикл, который должен это реализовывать (поиск и перезапись значений), но он не работает. Сам алгоритм мой нахождения цифры рабочий, проверка алертом есть, но цикл работать отказывается.

Может, кто-нибудь заметит ошибку?
Ответить с цитированием
  #2 (permalink)  
Старый 15.04.2013, 23:06
х.з
Посмотреть профиль Найти все сообщения от dmitriymar
 
Регистрация: 21.11.2010
Сообщений: 4,588

отслеживайте каждое значение алертом в цикле или выводом в консоль .
да и читаемый код научитесь писать
Сообщение от Batska
if (typeof subs.substring((subs.indexOf(arr[i]) + arr[i].length, subs.indexOf(arr[i]) + arr[i].length+1)*1) == 'number') {
table[arr[i]] = table[arr[i]]*subs.substring((subs.indexOf(arr[i]) + arr[i].length - 1, subs.indexOf(arr[i]) + arr[i].length)*1);
что в этом можно понять ? Кто может понять что может означать каждое из выражений? разбейте на переменные . назовите их соответствующе. и отслеживайте их значения в цикле , входит ли в ветвлении и прочее -алерта для этого более чем
а ещё в браузерах , есть инструменты разработчика и модули подобные фаирбагу если что

Функция этого чудо кода?
Сообщение от Batska
i = arr.length;
Сообщение от Batska
for (i=0; i < arr.length + 1; i++)

Последний раз редактировалось dmitriymar, 15.04.2013 в 23:13.
Ответить с цитированием
  #3 (permalink)  
Старый 15.04.2013, 23:28
Интересующийся
Отправить личное сообщение для Batska Посмотреть профиль Найти все сообщения от Batska
 
Регистрация: 02.02.2013
Сообщений: 21

Сообщение от dmitriymar Посмотреть сообщение
отслеживайте каждое значение алертом в цикле или выводом в консоль .
да и читаемый код научитесь писать

что в этом можно понять ? Кто может понять что может означать каждое из выражений? разбейте на переменные . назовите их соответствующе. и отслеживайте их значения в цикле , входит ли в ветвлении и прочее -алерта для этого более чем
а ещё в браузерах , есть инструменты разработчика и модули подобные фаирбагу если что

Функция этого чудо кода?
Количество элементов массива.
А второго, ну, сделать столько раз, сколько элементов в массиве.
Ответить с цитированием
  #4 (permalink)  
Старый 15.04.2013, 23:34
Интересующийся
Отправить личное сообщение для Batska Посмотреть профиль Найти все сообщения от Batska
 
Регистрация: 02.02.2013
Сообщений: 21

dmitriymar, я постараюсь научиться писать понятно, спасибо за совет.
а это
if (typeof subs.substring((subs.indexOf(arr[i]) + arr[i].length, subs.indexOf(arr[i]) + arr[i].length+1)*1) == 'number') {
table[arr[i]] = table[arr[i]]*subs.substring((subs.indexOf(arr[i]) + arr[i].length - 1, subs.indexOf(arr[i]) + arr[i].length)*1);

проверяет, если следующий символ за подстрокой, умноженный на 1, является числом, то значение меняем на значение элемента * на этот номер

Последний раз редактировалось Batska, 15.04.2013 в 23:44.
Ответить с цитированием
  #5 (permalink)  
Старый 16.04.2013, 00:46
Интересующийся
Отправить личное сообщение для Batska Посмотреть профиль Найти все сообщения от Batska
 
Регистрация: 02.02.2013
Сообщений: 21

Придирается вот к чему:
typeof subs.substring((subs.indexOf(arr[n]) + arr[n].length, subs.indexOf(arr[n]) + arr[n].length+1)*1 == 'number'

Uncaught TypeError: Cannot read property 'length' of undefined
Не хочет работать так в цикле, а если протестировать просто с нуликом или единичкой - работает. никто не знает, в чем может быть дело?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка в простом цикле Vargentum Events/DOM/Window 1 03.10.2012 22:04
Ошибка в цикле gadstwo Общие вопросы Javascript 2 18.01.2011 10:13
Ошибка в цикле WYK Я не знаю javascript 4 10.06.2009 14:35
То-ли лыжи не едут, толи... возможно ошибка в коде. AzriMan Общие вопросы Javascript 19 18.05.2009 16:07
IE: неизвестная ошибка выполнения _Kpot_ Internet Explorer 1 03.04.2008 11:00