2017-11-15 11 views
0

未定義のプッシュのプロパティを読み取ることができません。なぜそれは未定義ですか?私がconsole.log(columnsArray[i])をすると、それは私に価値を示しています。わかりません。未定義のプロパティ 'push'を読み取ることができません

var columnsArray = ["col1","col2","col3"]; 
var indexArray = []; 
function submitIndex() { 
    for (var i = 0; i <= columnsArray.length ; i++) { 
    if ($("#" + columnsArray[i]).is(":checked") === true) { 
     indexArray.push(columnsArray[i]); 
    } else { 
     console.log(columnsArray[i] + "is not checked"); 
    } 
    } 
    var indexArray = indexArray.filter(onlyUnique); 
    console.log(indexArray); 
} 
+0

'indexArray'は' columnsArray [i] 'ではなく、定義されていません。正確にどこに定義しましたか? –

+1

定義する前に 'indexArray'にアクセスしようとしています。 – Yash

+0

indexArrayが宣言されています! –

答えて

1

問題:ラインで

var indexArray = indexArray.filter(onlyUnique); 

あなたはそれがすでにループの前に宣言された後indexArray変数を再宣言しようとしています。

これは、ループの前の最初の宣言が無視されるように変数を持ち上げるので、ループ内にとなるので、になります。 詳細については、Hoistingvar keyword MDNの参考資料をご覧ください。

ソリューション:

あなたがこの行にvarキーワードを削除する必要があることを修正するには、次の

indexArray = indexArray.filter(onlyUnique); 
0

複製さerrorのためにここに私のバイオリンを参照して、solution here

物事を見てください注記するものは

var columnsArray = ["col1","col2","col3"]; 
var indexArray = []; 
function submitIndex(indexArray) { 
    for (var i = 0; i < columnsArray.length ; i++) //you dont need to go till 
    columnsArray length as this is 0 based indexed array not 1 so removed = 
    from here 
    { 
console.log('i='+i+' and columnsArray[i]='+columnsArray[i]); 
    if ($("#" + columnsArray[i]).is(":checked") === true) { 
    indexArray.push(columnsArray[i]); 
    } else { 
    console.log(columnsArray[i] + "is not checked"); 
    } 
    } 
// var indexArray = indexArray.filter(onlyUnique); I dont have onlyUnique 
filter so commented out 
console.log(indexArray); 
} 
submitIndex(indexArray); 
あなたは長さ1件までの配列を反復処理する必要が
  1. ので、あなたはそれがよりきれいになり、あなたが他のチェックボックスでこれを行うことができます機能、使用するパラメータを渡し、配列
  2. の.LENGTHための等価比較を削除することができます同様に
  3. コメントアウトされていますが、あなたはそれを使用できるはずです
  4. 変数をもう一度宣言して、配列を再度宣言する代わりに、別の配列にフィルタ結果を置き、 。
関連する問題