Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Стирается массив при выходе из each (https://javascript.ru/forum/jquery/31200-stiraetsya-massiv-pri-vykhode-iz-each.html)

skeef 29.08.2012 22:27

Стирается массив при выходе из each
 
Всем приветы! Прошу помочь ...
<?xml version="1.0" encoding="utf-8"?>
<root date="28.08.12">
  <mdata date="29.08.12">
    <bye>
      <b1>1.10</b1>
      <b2>1.20</b2>
      <b3>1.30</b3>
      <b4>1.40</b4>
      <b5>1.55</b5>
    </bye>
    <sell>
      <s1>0.00</s1>
      <s2>0.00</s2>
      <s3>0.00</s3>
      <s4>0.00</s4>
      <s5>0.00</s5>
    </sell>
  </mdata>
  <mdata date="30.08.12">
    <bye> ...

function getRate( ratedate, bs )
{
	var i, vname, sss;
	var rates = new Array();

	var md = $("mdata", xml);

	$.each(md, function() {
		var m_date = jQuery( this ).attr( 'date' );
		if ( m_date == ratedate )
		{
			for ( i = 1; i < 6; i++ )
			{
				vname = bs + i;
				rates[vname] = jQuery( this ).find( vname ).text();
				sss += jQuery( this ).find( vname ).text() + ' + ';
			}
			return false;
		}
	});

	alert('ratesAll: ' + rates);
	alert('sss: ' + sss);
	return rates;
}

Вызываю, к примеру так:
getRate( '29.08.12', 'b' );

На выходе из each массив rates оказывается пустой - alert('ratesAll: ' + rates) выводит пустоту! Переменная же sss - нормально сохраняет значение.
Внутри each массив rates нормально заполняется.
В чем ошибка? Бьюсь уже несколько часов - ничего не получается :(
Спасибо всем кто откликнется

devote 29.08.2012 22:29

замените:
var rates = new Array();
на вот это:
var rates = {};
так как массив может содержать только числовые ключи, а вы пытаетесь сохранить именованные.

devote 29.08.2012 22:31

либо замените это:
rates[vname] = jQuery( this ).find( vname ).text();
на это:
rates[ rates.length ] = jQuery( this ).find( vname ).text();

skeef 29.08.2012 22:48

Я понял, спасибо. Меня сбил PHP! В JS отсутствуют ассоциативные массивы

Deff 29.08.2012 22:51

<script type="text/javascript" src="http://yandex.st/jquery/1.4.4/jquery.min.js"></script>
<?xml version="1.0" encoding="utf-8"?>
<root date="28.08.12">
  <mdata date="29.08.12">
    <bye>
      <b1>1.10</b1>
      <b2>1.20</b2>
      <b3>1.30</b3>
      <b4>1.40</b4>
      <b5>1.55</b5>
    </bye>
    <sell>
      <s1>0.00</s1>
      <s2>0.00</s2>
      <s3>0.00</s3>
      <s4>0.00</s4>
      <s5>0.00</s5>
    </sell>
  </mdata>
  <mdata date="30.08.12">
    <bye> ...



<script type="text/javascript">


function getRate( ratedate, bs )
{
	var i, vname, sss;
	var rates = [];

	var md = $("mdata");
	$.each(md, function() {
		var m_date = jQuery( this ).attr( 'date' );
		if ( m_date == ratedate )
		{
			for ( i = 1; i < 6; i++ )
			{
				vname = bs + i;
				rates[i]=jQuery( this ).find( vname ).text();
				sss += jQuery( this ).find( vname ).text() + ' + ';
			}
			return false;
		}
	});

	//alert('ratesAll: ' + rates);
	alert('sss: ' + sss);
           return rates;
}

alert('ratesAll: ' + getRate( '29.08.12', 'b' ));
</script>

devote 29.08.2012 22:58

Цитата:

Сообщение от Deff
вы её не вынесли и не возвращали

как это не вынес? вынес же, строка 4 и возвращает о ее на строке 24

Deff 29.08.2012 23:13

Цитата:

Сообщение от devote
как это не вынес? вынес же, строка 4 и возвращает о ее на строке 24

Поправил скрипт - *мну думал - что он ждет и саму переменную на выходе, за функцией


Часовой пояс GMT +3, время: 03:28.