Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   проблема с передачей параметров в функцию (https://javascript.ru/forum/dom-window/21647-problema-s-peredachejj-parametrov-v-funkciyu.html)

bartonom 19.09.2011 11:15

проблема с передачей параметров в функцию
 
<script type="text/javascript"> 

function myConcat() {
   var len = arguments.length;  // количество аргументов
   alert('len = '+ len);
   var result="" 
   for (var i = 0; i < len; i++) {
      result += arguments[i] + ","; 
   }
   return result;
} 

stroka = '"'+"red"+'"'+","+'"'+"orange"+'"'+","+'"'+"blue"+'"';
alert('stroka = '+ stroka);

 res = myConcat("red","orange","blue");  //  вариант обращения к функции
// res = myConcat(stroka);                     //  вариант обращения к функции 

alert('res = ' + res);
</script>


Здравствуйте, возникла непонятная для меня проблема с передачей параметров в функцию.
Мне необходимо собрать аргументы в строку, а затем передать в функцию.
Но при передаче в функцию списка параметров в виде myConcat("red","orange","blue") - количество аргументов len = 3,
а при передаче в виде строки myConcat(stroka) - количество аргументов len = 1.
Строка сформирована так:
stroka = '"'+"red"+'"'+","+'"'+"orange"+'"'+","+'"'+"blue"+ '"';
При отображении alert(stroka) выводит "red","orange","blue", т.е. вроде тоже самое, а результат разный.
Подскажите, пожалуйста, в чем тут дело и можно ли эту проблему решить?

SkyLight 19.09.2011 11:47

Проблема в незнании языка. В первом случае вы передаете три аргумента, а во втором - один. Или для вас это не очевидно?

bartonom 19.09.2011 11:58

Очевидно, конечно, что идет как один аргумент, об этом и спрашиваю: можно ли обойти эту проблему, если строка фактически содержит те же три аргумента

Sweet 19.09.2011 12:23

function myConcat(){
  if( typeof arguments[ 0 ] == "string" && arguments.length == 1 )
    return ( arguments[ 0 ].match( /\w+/g ) || [] ).join( "," );
  return Array.prototype.slice.call( arguments ).join( "," );
};

alert(
  myConcat( "red", "orange", "blue" ) == myConcat( '"red", "orange", "blue"' )
);

bartonom 19.09.2011 12:41

Спасибо!


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