2016-04-10 4 views
-2

に要素をプッシュするとの問題、私は、配列に新しい要素をプッシュしたい:私が得た次のコードでは、ネストされた配列

var temp = []; 
for(var i in resultDb){  
    temp.push({'ID':resultDb[i].ID}); 
    temp.push({'Label':resultDb[i].Label}); 
    temp.push({'User':[{'Name':resultDb[i].Name , 'ScreenName':resultDb[i].ScreenName}]}); 
    temp.push({'TDate':resultDb[i].TDate}); 
} 

for(var i in temp){ 
    console.log(temp[i].User.ScreenName); 
} 

結果はCannot read property 'ScreenName' of undefinedです。問題は具体的にはUserですが、その他は問題ありません。印刷することができます。あなたはおそらくこれを実行しようとしていた

+0

は 'User'は配列です。 [mcve]を提供してください –

答えて

1
var temp = []; 
//this loop pushes 4 elements in the array for each element in resultDb 
for(var i in resultDb){  
    temp.push({'ID':resultDb[i].ID}); 
    temp.push({'Label':resultDb[i].Label}); 
    //why an array here? 
    temp.push({'User':[{'Name':resultDb[i].Name , 'ScreenName':resultDb[i].ScreenName}]}); 
    temp.push({'TDate':resultDb[i].TDate}); 
} 

//...therefore you have resultDb.length * 4 elements in temp. 
//and only 1 every 4 elements has a User property 
for(var i in temp){ 
    console.log(temp[i].User.ScreenName); 
} 

var temp = []; 
for(var i in resultDb){  
    temp.push(Object.assign(
     {'ID':resultDb[i].ID}, 
     {'Label':resultDb[i].Label}, 
     {'User':{'Name':resultDb[i].Name, 'ScreenName':resultDb[i].ScreenName}}, 
     {'TDate':resultDb[i].TDate} 
    )); 
} 

for(var i in temp){ 
    console.log(temp[i].User.ScreenName); 
} 

はここでそれを行うのにも良い方法です:

var temp = resultDb.map(function (result) { 
    return Object.assign(
     {'ID':result.ID}, 
     {'Label':result.Label}, 
     {'User':{'Name':result.Name, 'ScreenName':result.ScreenName}}, 
     {'TDate':result.TDate} 
    ); 
}) 

for(var i in temp){ 
    console.log(temp[i].User.ScreenName); 
} 
0

これは、配列がどのように働くかではありません。新しいオブジェクトをあなたの配列にプッシュするだけです。押しているオブジェクトはすべて、構造が異なります。したがって、配列の最初のエントリには、ユーザープロパティがありません。

ユーザは定義されていないので、結果として未定義の 'ScreenName'プロパティを読み取ることができません。

あなたがここでやろうとしているのは、{'ID':result.ID}オブジェクトを取得して、そこからユーザープロパティを読み取ろうとしますが、IDプロパティのみを持っています。

0

まず最初に、tempはオブジェクトであり、配列ではなく、[]ではなく{}でなければなりません。通常、あなたは両方を確認し、これにアプローチする2通りの方法があります

「未定義の 『スクリーンネーム』プロパティを読み取ることができません」について

。あなたは配列としてユーザーに宣言しておりますので

if(typeof resultDb[i] == 'undefined') 
    return false;// index is not valid ? 

var some_value = (typeof resultDb[i].ScreenName == 'undefined' ? false : resultDb[i].ScreenName); 
0

for(var i in temp){ 
    console.log(temp[i].hasOwnProperty("User") ? temp[i].User[0].ScreenName : "not found"); 
}