2016-09-19 17 views
1

他の質問にも同様の名前があることがわかりました。私はそれらを調べましたが、実際に私と同じ問題はありませんでした。タイプerror indexOf()はforループ内の関数ではありません

私のforループで何らかの理由でindexOf()が関数ではなく呼び出されました。ループの外側でテストを試してみましたが、問題は分かりません。

function sym(args) { 
    //new array 
    var newArray = []; 

    //loops through however many arguments are inputted 
    for(var i=0;i<arguments.length;i++) { 
    //loops through each argument array's items 
    for(var j=0;j<arguments[i].length;j++) { 
     //if the newArray array doesn't have the array item, it adds it to the new array, to avoid duplicates. 
     if(newArray.indexOf(arguments[i][j]) === -1) { 
     newArray = newArray.push(arguments[i][j]); 
     } 
    } 
    } 
    return newArray; 
} 

sym([1, 2, 3], [5, 2, 1, 4]); 

答えて

2

を使用しません長さがプッシュされた配列であり、配列自体ではありません。

newArray = newArray.push(arguments[i][j]);を削除して、それをnewArray.push(arguments[i][j]);にすると、エラーが消えるはずです。

+2

まあ、実際には 'push'は配列の新しい長さを返します。 –

+0

ありがとう@RocketHazmat :-) – Neal

+0

それはうまく働いてくれてありがとう!私はindexOf関数自体に問題があると考えていたので、私は混乱しました。 –

2

のArray.push()配列を変更し、それ(その新しい長さ)を返し、そう代わり

newArray = newArray.push(arguments[i][j]); 

単に返すnewArray.push

newArray.push(arguments[i][j]); 
+1

プッシュ** ** nullを返しません。 – Neal

+0

'push'は実際には' null 'ではなく配列の(new)* length *を返します。 –

+0

'Array.push()はnullを返します。いいえ、配列の新しい長さを返します。 – vlaz

0

Array.prototype.pushは、メソッドが呼び出されたオブジェクトの新しいlengthプロパティを返します。 MDNを参照してください。

最初のループ反復後、newArrayは配列ではなく数値です。だから、

、コード修正:

newArray.push(arguments[i][j]);