2009-09-15 8 views
19

私はちょうど機能に送信されるすべての引数の文字列をしたいJavaScript配列の結合に失敗したのはなぜですか?

var getSearchFields = function(method) { 

    console.log(arguments); // this prints them out nicely into the console 

    var args = arguments; 

    var argsString = args.join('/'); // I expect 'arg1/arg2/arg3', instead I get 'args.join is not a function' 
} 

(一つだけはいえ関数内で定義されている)複数の引数を受け入れる機能を持っています。このエラーが発生し続ける:

args.join is not a function

私が間違っていることを教えてもらえますか?

答えて

42

argumentsは擬似配列であり、実際の配列ではありません。 joinメソッドは配列で使用できます。あなたがカンニングする必要があります

他の記事と同様に
var convertedArray = []; 

for(var i = 0; i < arguments.length; ++i) 
{ 
convertedArray.push(arguments[i]); 
} 

var argsString = convertedArray.join('/'); 

を、あなたは、省略形として、次の操作を行うことができます

var argsString = Array.prototype.join.call(arguments, "/"); 
+6

あなたは単に、アレイへの可能性がオブジェクト: 'VAR convertedArray = Array.prototype.slice.call(引数);' – CMS

+0

あなたはまた、スプライスを使用してループを簡素化することができ.... var args = [] .splice.call(arguments、0); –

+3

@Russ:短いですが、IEで動作しないため、Array.prototype.slice関数を直接呼び出す必要があります。 – CMS

0

argumentsは、JavaScriptの配列ではありません。それはjoinメソッドを持たない特別なオブジェクトです。

5

引数は実際には配列ではありません。

この試してみてください。上記のすべての言ったように、本当に配列ではありませんが、あなたはArray.prototypeをアクセスし、applyまたはcallにしてそれらを実行することで、直接配列関数を適用することができargumentsオブジェクト、

var args = [].splice.call(arguments,0); 
var argsString = args.join('/'); 
10

をコンテキスト変更:あなたはjQueryの1.2+を使用している場合

var argsString = Array.prototype.join.call(arguments, '/'); 
+0

'/'は角括弧で囲む必要があります –

+4

いいえ、私はコールを使用しています。適用しません。 – CMS

+2

...訂正。これは、applyが呼び出されたときに必要な場合があります。あなたはコールを使用しています。私の間違い。 –

7

を、あなたは$.makeArray()を使用することができます。

問題の例から

Convert an array-like object into a true JavaScript array.

、ちょうどあなたがそれを動作させるための変数への割り当てを行う必要があり

var args = $.makeArray(arguments); 
+0

これはjQuery 1.11.0での私の仕事です。 – Celt

-1

この行を使用しています。

var a = ['Wind', 'Rain', 'Fire']; 

var myVar1 = a.join(); 

var myVar2 = a.join(', '); 

var myVar3 = a.join(' + '); 

var myVar4 = a.join(''); 
+1

あなたの声明は正しくなく、質問に答えません。 – alex

0

あなたがangular4ユーザHttpHeadersにhttpリクエストを投稿中になっている場合は、以下の回答を確認してください。 HttpHeadersを入手した後、私の問題は解決されます。引数を変換するに

this.headers = new HttpHeaders({ 'Authorization': token1, 'X-IBM-Client-Id': 'ddddddd' }); 

values.join is not a function in the file http.es5.js Angular 4

関連する問題