Search code examples
javascriptarraysjsonmultidimensional-arraymootools

Javascript | JSON and ARRAY


May be you can help me with my task. I have a JSON string:

{
    "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*/
}

My Question:

How can I create a new arrays dynamically (2 for this example for: 62 and 66) and push messages?

To 1 (62):

{"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"}

To 2 (66):

{"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"}

Thanks!


Solution

  • You are already identifying your chat ID and pushing it into the chanels array in your code:

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

    You are also identifying unique IDs in your code:

    chanels_u = chanels.unique();
    

    All you need to do is locate your chats from the JSON object by comparing them to the IDs in chanels_u and if there's a match, push the text field to the messages array. This is should be close to what you require:

    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);
            }
        }
    }