Javascript 用另一个对象更新对象

Javascript updating object with another 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 的元素更新第一个对象的元素并添加新属性,因此结果将是

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
        }

    ]

我在循环的海洋中感到头晕...没有结果...有什么线索吗?

尝试这样的事情:

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

如果您不介意使用 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)

就这些了。