2017-08-09 12 views
1

次のJavaScriptコードでは、未定義のエントリを取得していますことは、私のjavascriptのコードは、なぜ私はそう下記

const rData = [[{"prop11": 10}, {"prop2": 12}]]; 
 
     const tData = []; 
 
     const tddData = []; 
 
     for(const item of rData[0]){ 
 
     tData.push(Object.keys(item).toString()); 
 
     console.log('trData...', tData); 
 
     tData.map(y => { 
 
      tddData.push(item[y]); 
 
      console.log('tdDta....', tddData); 
 
     }); 
 
     }

後console.logs

trData... Array [ "prop11" ] 
tdDta.... Array [ 10 ] 
trData... Array [ "prop11", "prop2" ] 
tdDta.... Array [ 10, undefined ] 
tdDta.... Array [ 10, undefined, 12 ] 

Iの出力されていますそれらの未定義の値がどこから来ているのか分からないようです。助けてください。 forループの2回目の繰り返しで

答えて

0

item{"prop2": 12}tData["prop11", "prop2"]があります。あなたがtData.map()を呼び出すと、あなたは:

tddData.push(item["prop11"]); 
tddData.push(item["prop2"]); 

を何item["prop11"]がないので、あなたはそのいずれかのundefinedを取得します。

tDataには、配列内のすべての以前のオブジェクトのキーが含まれているため、後のオブジェクトに以前のキーがない場合は常にundefinedになります。

また、オブジェクトのいずれかに複数のプロパティがある場合、Object.keys(item).toString()はコンマで区切られたキーのリストになります。あなたは

{"key1": 1, "key2": 3} 

を持っている場合たとえば、あなたはtdData"key1,key2"を押します。 item[y]でこれを使用しようとすると、undefinedが返されます。

+0

私はその原因を知りたかっただけです。 tddDataの最終配列から未定義のものを取り除こうとしていましたが、別の方法を使用してそれを実行した可能性がありましたが、最初にそれを避ける根本的な原因を知りたかったのです。あなたはそれをしました。ありがとう。 – Ravy

関連する問題