2017-01-25 18 views
-1

どうすればsteamid "を配列の友人から受け取ることができますか?
私は間違っているのですか?
フレンドリストフレンドは本当に混乱しています。 JSON配列から値を取得するにはどうすればよいですか?

var obj = 
 
{ 
 
\t "friendslist": { 
 
\t \t "friends": [ 
 
\t \t \t { 
 
\t \t \t \t "steamid": "76561197965254644", 
 
\t \t \t \t "relationship": "friend", 
 
\t \t \t \t "friend_since": 1427418915 
 
\t \t \t }, 
 
\t \t \t { 
 
\t \t \t \t "steamid": "76561197967483523", 
 
\t \t \t \t "relationship": "friend", 
 
\t \t \t \t "friend_since": 1483547216 
 
\t \t \t }, 
 
\t \t \t { 
 
\t \t \t \t "steamid": "76561197967658405", 
 
\t \t \t \t "relationship": "friend", 
 
\t \t \t \t "friend_since": 1431204923 
 
\t \t \t } 
 
     ] 
 
\t } 
 
} 
 
for (var i = 0; i < obj.length; i++) { 
 
    console.log(obj[i].friends['steamid']); 
 
    
 
}

+3

obj.friendslist.friends [0] .steamid –

+0

'obj'は' for'を使って反復できる配列ではありません。それはオブジェクトです。 'friends'は配列です。 – Abhitalks

+0

@KD Wow Thanksは働いていますが、なぜこれが機能しているのか説明できますか? – ShadowGR

答えて

1

あなたが私の答えのためのあなたのコメントに説明を求めたよう...

あなたが別のオブジェクト、String/Number/DateまたはArray可能性がある特定の性質を保持しているJSONオブジェクトを持っています。したがって、オブジェクト内のプロパティにアクセスするには、最初にその名前で次の方法で子にアクセスする必要があります。

obj.friendslist 

OR

obj["friendslist"] 

あなたは、したがって、あなたが次のようにそれにアクセスする必要が friendslist内部の別の子を持っています。今すぐあなたの friendsプロパティは配列を保持

obj.friendslist.friends 

、あなたは繰り返すことができますそれを介してそれを使用してfor loop

for (var i = 0; i < obj.friendslist.friends.length; i++) { 
    console.log(obj.friendslist.friends[i]['steamid']); 

} 
3

var obj = 
 
    { 
 
    \t "friendslist": { 
 
    \t \t "friends": [ 
 
    \t \t \t { 
 
    \t \t \t \t "steamid": "76561197965254644", 
 
    \t \t \t \t "relationship": "friend", 
 
    \t \t \t \t "friend_since": 1427418915 
 
    \t \t \t }, 
 
    \t \t \t { 
 
    \t \t \t \t "steamid": "76561197967483523", 
 
    \t \t \t \t "relationship": "friend", 
 
    \t \t \t \t "friend_since": 1483547216 
 
    \t \t \t }, 
 
    \t \t \t { 
 
    \t \t \t \t "steamid": "76561197967658405", 
 
    \t \t \t \t "relationship": "friend", 
 
    \t \t \t \t "friend_since": 1431204923 
 
    \t \t \t } 
 
      ] 
 
    \t } 
 
    } 
 
    obj.friendslist.friends.forEach((i) => { 
 
     console.log(i.steamid); 
 
    })

obj.friendslist.friends配列を返し、それはその後に掛けすることができます。配列の各値はオブジェクトで、必要なプロパティはsteamidです。

+2

このコードスニペットは質問を解決するかもしれませんが[説明を含む](http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-回答)は本当にあなたの投稿の質を向上させるのに役立ちます。将来読者の質問に答えていることを覚えておいてください。そうした人々はあなたのコード提案の理由を知らないかもしれません。 – bahrep

+0

.forEachは単純なforループより優れていますか? – ShadowGR

+0

ありがとう@bahrep、必要な変更を加えました。それは実際に私の最初の投稿だった、私はまだ初心者の一種です –

0

友達リストオブジェクトを取得し、友人の配列/リストを取得し、それを繰り返します。 その中のすべてのオブジェクトに対して、スチームIDなどをオブジェクトに印刷します。

for (var i = 0; i < obj.friendslist.friends.length ; i++) { 
     console.log(obj.friendslist.friends[i].steamid); 
} 
+0

ありがとう、今私の頭の中で意味があります! – ShadowGR

+0

@jonhid、コードのみの回答はそれほど有用ではありません。あなたの答えを少し広げてみてください。 – yivi

+0

あなたは正しいですが、私はそれが自明であると思っていたのでとても分かりました。 – jonhid

0

あなたは、ネストされた友人プロパティに最初にアクセスもする必要があり、その後、それを介してitterateします。

var friends = obj.friendslist.friends; 

for (var i = 0; i < friends.length; i++) { 
    console.log(friends[i]['steamid']); 
} 
+0

ありがとうございました! – ShadowGR

+0

あなたは大歓迎です。 –

0

Array map()メソッドを使用して、特定のキー値を取得するオブジェクトの配列を反復処理します。

map()メソッドは、この配列のすべての要素に提供された関数を呼び出した結果で新しい配列を作成します。デモの作業

var obj = 
 
{ 
 
\t "friendslist": { 
 
\t \t "friends": [ 
 
\t \t \t { 
 
\t \t \t \t "steamid": "76561197965254644", 
 
\t \t \t \t "relationship": "friend", 
 
\t \t \t \t "friend_since": 1427418915 
 
\t \t \t }, 
 
\t \t \t { 
 
\t \t \t \t "steamid": "76561197967483523", 
 
\t \t \t \t "relationship": "friend", 
 
\t \t \t \t "friend_since": 1483547216 
 
\t \t \t }, 
 
\t \t \t { 
 
\t \t \t \t "steamid": "76561197967658405", 
 
\t \t \t \t "relationship": "friend", 
 
\t \t \t \t "friend_since": 1431204923 
 
\t \t \t } 
 
     ] 
 
\t } 
 
}; 
 

 
var newObj = obj.friendslist.friends.map(function(item) { 
 
    return item.steamid; 
 
}); 
 

 
console.log(newObj);

+0

私はこれを行うことができると思います:newObj.push(obj.friendslist.friends.steamid)、 またはマップでそれを行う方が良いですか? – ShadowGR

+0

mapは配列の各要素を繰り返します。あなたのnewObj.push(obj.friendslist.friends.steamid)はそれをしません。マップは、ループの代わりに配列を反復するより良い方法です。 –

0

あなたが持っているものはfriendslistプロパティで、Objectです。 そのプロパティはで、属性が1つの場合はfriendsです。
friendsは、ArrayObjectです。
Thosesオブジェクトは、しかし、あなたのコードではなくfriendslist財産を、直接objを反復処理しよう興味のあるsteamid性質を持っている。

。この作品は、プロパティにアクセスするためにすることは、配列の要素にアクセスすると同じように行うことができます。

obj.property === obj['property'] 

ですから、objのプロパティ0にアクセスしようとしています。ご覧のように、それは存在しません、そしてundefinedを返してください。

for (var i = 0; i < obj.length; i++) { 
    console.log(
     obj. //The base object 
     friendslist. //The friendslist property 
     friends[i]. //The friends property, iterated 
     steamid //Get the steamid 
    ); 
} 

選択肢がobj.friendslist.friendsArrayのジェネリックmapまたはforEachメソッドを使用することができ、またobj['friendslist']['friends']のように書くことができます:あなたが欲しい

friendslistプロパティを反復することです。

ArrayObjectの間の類似点については、javascriptおよびその尊重方法をお読みください。 MDNはそのための良い場所ですが、どんな文書でも十分です。

関連する問題