2011-12-27 18 views
2

私の仕事を手伝ってもらえますか?Javascript | JSONとARRAY

{ 
    "chats":[ 
     {"id":"1","time":"13:02", "from_id":"2692","text":"1","to_id":"62"}, 
     {"id":"2","time":"13:48", "from_id":"62","text":"Hello!","to_id":"2692"}, 
     {"id":"12","time":"15:47", "from_id":"2692","text":"3","to_id":"62"}, 
     {"id":"13","time":"15:48", "from_id":"62","text":"4","to_id":"2692"}, 
     {"id":"30","time":"08:57", "from_id":"2692","text":"To me","to_id":"62"}, 
     {"id":"31","time":"09:28", "from_id":"66","text":"From user1","to_id":"2692"}, 
     {"id":"32","time":"09:29", "from_id":"66","text":"From user1","to_id":"2692"}, 
     {"id":"32","time":"09:29", "from_id":"2692","text":"From user1","to_id":"66"} 
    ], 
    "lastid": "32" 
} 

var my_id = 2692 /*My chats*/ 

/*Success JSON request below*/ 

onSuccess: function(m){ 
    var messages = []; 
    var chanels = []; 
    var chanels_u = []; 
    for(var i=0; i<m.chats.length;i++){      
     if (my_id != '' && m.chats[i].from_id != parseInt(my_id)){ 
      chanels.push(m.chats[i].from_id); 
     } 
    } 
    chanels_u = chanels.unique(); /*We get id's: 62,66*/ 
} 

私の質問

がどのように動的に(2のために、この例:62と66)を新しい配列を作成することができます私は、JSON文字列を持っているとのメッセージをプッシュ?

(62)1:

{"id":"1","time":"13:02", "from_id":"2692","text":"1","to_id":"62"}, 
{"id":"2","time":"13:48", "from_id":"62","text":"Hello!","to_id":"2692"}, 
{"id":"12","time":"15:47", "from_id":"2692","text":"3","to_id":"62"}, 
{"id":"13","time":"15:48", "from_id":"62","text":"4","to_id":"2692"}, 
{"id":"30","time":"08:57", "from_id":"2692","text":"To me","to_id":"62"} 

(66)2:

{"id":"31","time":"09:28", "from_id":"66","text":"From user1","to_id":"2692"}, 
{"id":"32","time":"09:29", "from_id":"66","text":"From user1","to_id":"2692"}, 
{"id":"32","time":"09:29", "from_id":"2692","text":"From user1","to_id":"66"} 

ありがとう!

+0

そして、私たちはあなたを助けるもの? – reporter

+0

「入れ子になったループ」と呼ばれるものを調べたいと思うかもしれません。それは私のキャリアの中で非常に貴重なツールであり、私もあなたに役立つことを願っています! – scraimer

+0

例が見つかりません... – user889349

答えて

1

あなたはすでにあなたのチャットIDを識別し、あなたのコード内でchanels配列にそれを推進している。

chanels_u = chanels.unique(); 

すべて:あなたはまた、あなたのコードに固有のIDを識別している

if (my_id != '' && m.chats[i].from_id != parseInt(my_id)){ 
      chanels.push(m.chats[i].from_id); 
} 

JSONオブジェクトのチャットをchanels_uのIDと比較して見つけてください。一致するものがあれば、テキストフィールドをメッセージ配列に押します。これはあなたが必要とするものに近いべきである。

for(var i=0; i<m.chats.length;i++){      
    for(var j=0; j<chanels_u.length;j++){ 
     if (my_id !== '' && m.chats[i].from_id === chanels_u[j]){ 
      messages.push(m.chats[i].text); 
     } 
    } 
} 
+0

... chanels_u [j] jはどこに定義されていますか? – user889349

+0

それは2番目のループにあるべきです、私は私の応答を更新します。 – Abbas

0

JSONは無効です。 JSONを適切に閉じることができませんでした。

{ 
    "chats": [ 
     { 
      "id": "1", 
      "time": "13:02", 
      "from_id": "2692", 
      "text": "1", 
      "to_id": "62" 
     }, 
     { 
      "id": "2", 
      "time": "13:48", 
      "from_id": "62", 
      "text": "Hello!", 
      "to_id": "2692" 
     }, 
     { 
      "id": "12", 
      "time": "15:47", 
      "from_id": "2692", 
      "text": "3", 
      "to_id": "62" 
     }, 
     { 
      "id": "13", 
      "time": "15:48", 
      "from_id": "62", 
      "text": "4", 
      "to_id": "2692" 
     }, 
     { 
      "id": "30", 
      "time": "08:57", 
      "from_id": "2692", 
      "text": "To me", 
      "to_id": "62" 
     }, 
     { 
      "id": "31", 
      "time": "09:28", 
      "from_id": "66", 
      "text": "From user1", 
      "to_id": "2692" 
     }, 
     { 
      "id": "32", 
      "time": "09:29", 
      "from_id": "66", 
      "text": "From user1", 
      "to_id": "2692" 
     } 
    ] 
} 

データを検証するためにJSONLINTを使用してください。この配列を動的に更新(取得/設定)することができます。

var msgBox={"chats":[]}; 
var msg={"id":1,"time":(new Date()).getTime(),"from_id":"","text":"","to_id":""}; 

var info={ // whole JSON data } 
var chats=info['chats']; 

for(m in chats){ 
    console.log(chats[m].text) // will display the text 
    console.log(chats[m].time) // will display the time of chat 
    chat[m].to_id=32424; // you can modify the to_id value 
} 
+0

おそらく。それは私のコードで動作します。しかし、私のクエストオンには正解ではありません。ありがとう:) – user889349

+0

ok。私はいくつかのコードで更新しようとします:) –

0

アレイの代わりにシャネルとオブジェクトを作成できます。

onSuccess: function(m){ 
    var messages = []; 
    var chanels = {}; 
    var chanels_u = []; 
    for(var i=0; i<m.chats.length;i++){      
     if (my_id != '' && m.chats[i].from_id != parseInt(my_id)){ 
      var fromID = m.chats[i].from_id; 
      if(!chanels[fromID]){ 
       chanels[fromID] = []; 
      } 
      chanels[fromID].push(m.chats[i]); 
     } 
    } 
    //chanels_u = chanels.unique(); /*We get id's: 62,66*/ 
} 
1

これは、あなたがやりたいだろう、私は信じている - あなたがそれらをどの方法であなたをループすることができますようにto_idとfrom_idのキーを持つ新しいオブジェクトを作成します欲しいです。 toUserオブジェクトとfromUserオブジェクトを個別にループし、返信を作成する際に相互参照することができますが、それは簡単です。

var chats = { 
    "chats":[ 
     {"id":"1","time":"13:02", "from_id":"2692","text":"1","to_id":"62"}, 
     {"id":"2","time":"13:48", "from_id":"62","text":"Hello!","to_id":"2692"}, 
     {"id":"12","time":"15:47", "from_id":"2692","text":"3","to_id":"62"}, 
     {"id":"13","time":"15:48", "from_id":"62","text":"4","to_id":"2692"}, 
     {"id":"30","time":"08:57", "from_id":"2692","text":"To me","to_id":"62"}, 
     {"id":"31","time":"09:28", "from_id":"66","text":"From user1","to_id":"2692"}, 
     {"id":"32","time":"09:29", "from_id":"66","text":"From user1","to_id":"2692"}, 
     {"id":"32","time":"09:29", "from_id":"2692","text":"From user1","to_id":"66"} 
    ], 
    "lastid": "32" 
}; 

var newchats = {}, my_id = 2692; 

chats.chats.each(function(chat) { 
    if (!chat.id || !chat.id.length || chat.from_id == my_id) 
     return; 

    newchats["from" + chat.from_id] = newchats["from" + chat.from_id] || []; 
    newchats["from" + chat.from_id].push(chat); 

    newchats["to" + chat.to_id] = newchats["to" + chat.to_id] || []; 
    newchats["to" + chat.to_id].push(chat); 

}); 

console.log(newchats, JSON.encode(newchats)); 

は、jsfiddle http://jsfiddle.net/dimitar/7j2SN/上の出力を参照してください。

{ 
    "from62": [{ 
     "id": "2", 
     "time": "13:48", 
     "from_id": "62", 
     "text": "Hello!", 
     "to_id": "2692"}, 
    { 
     "id": "13", 
     "time": "15:48", 
     "from_id": "62", 
     "text": "4", 
     "to_id": "2692"}], 
    "to2692": [{ 
     "id": "2", 
     "time": "13:48", 
     "from_id": "62", 
     "text": "Hello!", 
     "to_id": "2692"}, 
    { 
     "id": "13", 
     "time": "15:48", 
     "from_id": "62", 
     "text": "4", 
     "to_id": "2692"}, 
    { 
     "id": "31", 
     "time": "09:28", 
     "from_id": "66", 
     "text": "From user1", 
     "to_id": "2692"}, 
    { 
     "id": "32", 
     "time": "09:29", 
     "from_id": "66", 
     "text": "From user1", 
     "to_id": "2692"}], 
    "from66": [{ 
     "id": "31", 
     "time": "09:28", 
     "from_id": "66", 
     "text": "From user1", 
     "to_id": "2692"}, 
    { 
     "id": "32", 
     "time": "09:29", 
     "from_id": "66", 
     "text": "From user1", 
     "to_id": "2692"}] 
}