How to get objects from an array, with filter passing as parameter an object with multiple ID's

3

Associating the "categories" object in "products"; With the IDs that I need to associate with such a product, so for example "products 1" should receive the "categories" with the ID [1, 3, 4]. creating another array by combining the data between these objects.

{
    "produtos": [{
        "id": 1,
            "nome": "Produto 1",
            "categorias": [1, 3, 4]
    }, {
        "id": 2,
            "nome": "Produto 2",
            "categorias": [1, 2, 5]
    }, {
        "id": 3,
            "nome": "Produto 3",
            "categorias": [3, 1, 4]
    }],
        "categorias": [{
        "id": 1,
            "nome": "Categoria 1"
    }, {
        "id": 2,
            "nome": "Categoria 2"
    }, {
        "id": 3,
            "nome": "Categoria 3"
    }, {
        "id": 4,
            "nome": "Categoria 4"
    }, {
        "id": 5,
            "nome": "Categoria 5"
    }]
}

Array result:     {         "products": [ {             "id": 1,                 "name": "Product 1",                 "categories": [                    {"id": 1, "name": "Category 1"}, {"id": 3, "name": "Category 3"}, {"id": 4, ]         } ]

    
asked by anonymous 23.10.2014 / 23:06

1 answer

4

If you understand well what you want to test like this:

var json = { "produtos": [{ "id": 1, "nome": "Produto 1", "categorias": [1, 3, 4] }, { "id": 2, "nome": "Produto 2", "categorias": [1, 2, 5] }, { "id": 3, "nome": "Produto 3", "categorias": [3, 1, 4] }], "categorias": [{ "id": 1, "nome": "Categoria 1" }, { "id": 2, "nome": "Categoria 2" }, { "id": 3, "nome": "Categoria 3" }, { "id": 4, "nome": "Categoria 4" }, { "id": 5, "nome": "Categoria 5" }] };

json = (function () {
    json.produtos.forEach(function (produtoObjeto) {
        produtoObjeto.categorias = produtoObjeto.categorias.map(function(id) {
            var categoria = json.categorias.filter(function(objeto) {
                return objeto.id == id;
            })[0];
            return categoria;
        });
    })
    return json;
})();
alert(JSON.stringify(json, null, 4));

Dividing by parts what the code does:

  • json.produtos.forEach(function (produtoObjeto) {

Itera about the product array

  • produtoObjeto.categorias = produtoObjeto.categorias.map(function(id) {

will map the array of categories within each product. You will change each number within that array by the corresponding object in the array of categories.

  • var categoria = json.categorias.filter(function(objeto) {

Within the array of categories the .filter() will return only the one that has the right ID

    
24.10.2014 / 00:03