Javascript用另一个对象更新对象

时间:2015-02-20 13:47:13

标签: javascript arrays object

我有两个对象,第一个:

prods = [
        {
            'id':1,
            'category_ID' : 26,
            'name':'prod1',
            'descripcion' : 'sadasdsad',
        },
        {
            'id':2,
            'category_ID' : 26,
            'name':'prod2',
            'descripcion' : '21312d',
        },
        {
            'id':3,
            'category_ID' : 6,
            'name':'prod3',
            'descripcion' : 'ergrd',
        },
        {
            'id':4,
            'category_ID' : 12,
            'name':'prod4',
            'descripcion' : 'wwwwwwww',
        }

    ]

第二个,其元素随机排序

orders = [
        {
            'id':2,
            'category_ID' : 26,
            'name':'producto2',
            'descripcion' : '21312d',
            'units': 1,
            'isSelected' : 1
        },
        {
            'id':4,
            'category_ID' : 12,
            'name':'producto4',
            'descripcion' : 'wwwwwwww',
            'units': 21,
            'isSelected' : 1
        },
        {
            'id':1,
            'category_ID' : 26,
            'name':'producto1',
            'descripcion' : 'sadasdsad',
            'units': 34,
            'isSelected' : 1
        }

    ]

我试图用第二个匹配的id&更新第一个对象的元素并添加新的propierties,结果将是

prods = [
        {
            'id':1,
            'category_ID' : 26,
            'name':'prod1',
            'descripcion' : 'sadasdsad',
            'units': 34,
            'isSelected' : 1
        },
        {
            'id':2,
            'category_ID' : 26,
            'name':'prod2',
            'descripcion' : '21312d',
            'units': 1,
            'isSelected' : 1
        },
        {
            'id':3,
            'category_ID' : 6,
            'name':'prod3',
            'descripcion' : 'ergrd',
        },
        {
            'id':4,
            'category_ID' : 12,
            'name':'prod4',
            'descripcion' : 'wwwwwwww',
            'units': 21,
            'isSelected' : 1
        }

    ]

我在一个循环的海洋中晕眩......没有结果......任何线索?

2 个答案:

答案 0 :(得分:4)

尝试这样的事情:

function merge(products, orders){

    for(var i = 0; i < products.length; i++){
        var prod = products[i];
        for(var j = 0; j < orders.length; j++){
            var order = orders[j];
            if(order.id == prod.id){
                for(var key in order){
                    prod[key] = order[key];
                }
            }
        }
    }
}

然后您可以使用这样的功能;

merge(prods, orders);

答案 1 :(得分:0)

如果您不介意使用jquery,可以执行以下操作:

// Go through prods (destination) array
var prods = $.grep(prods, function( prod ) {

    // Go through orders (source) array
    var result = $.grep(orders, function(order){ 

        // Match id on both arrays, if same extend ( copy over ) object
        if (order.id === prod.id) {
            $.extend(prod, order);

            // Returning true keeps this item in the array ( If nothing or false is returned, grep won't keep it in result )
            return true;
        }
        // else .. don't keep the item ? ( Your choice .. don't know how you want to manage it )
    });

    // Return all items ( Don't filter 'prods' items and therefore return all )
    return true;
});

// Print for testing
var _prods = JSON.stringify(prods)

这就是全部。