繁体   English   中英

JavaScript:有条件地将JSON对象从一个数组添加到另一个数组

[英]JavaScript: Add JSON objects from one array to another array conditionally

我想计算合并JSON。 我有两个JSON数组,想将对象从一个数组添加到另一个具有相同值的对象

产品展示

"Products": [
                {
                    "Date": "2015-04-28T12:30:19.107",
                    "Code": "003UYTX1A",
                    "Title": "Divatex Dots Microfiber Queen Bed In the Bag",
                    "Description": "Go crazy with lots of dots with Divatex,                    
                    "Weight": 7.60,
                    "WeightUnit": "pounds",                    
                    "AverageRating": 4.1,                    
                    "EstimatedSalesPerDay": 761,
                    "ProfitScore": 50,
                    "UpdateStatus": 0,
                    "VersionCode": 23
                },
                {
                    "Date": "2015-04-28T12:29:46.66",
                    "Code": "05461AQDV",
                    "Title": "Wilton 1912-1294 100 Count Party Bags",
                    "Description": "Some Description,                    
                    "Weight": 8.10,
                    "WeightUnit": "pounds",                    
                    "AverageRating": 4.0,                    
                    "EstimatedSalesPerDay": 711,
                    "ProfitScore": 45,
                    "UpdateStatus": 0,
                    "VersionCode": 23
                }]

详情

"Detail": [
                {
                    "Date": "2015-04-28T12:29:45.95",
                    "Code": "003UYTX1A",
                    "CategoryId": "1055398",
                    "CategoryTitle": "Some Title",
                    "TotalReviews": 31
                },
                {
                    "Date": "2015-04-28T12:29:45.95",
                    "Code": "05461AQDV",
                    "CategoryId": "1055398",
                    "CategoryTitle": "Title",                                                
                    "TotalReviews": 211
                },
                {
                    "Date": "2015-04-28T12:29:45.95",
                    "Code": "003UYTX1A",
                    "CategoryId": "1055398",
                    "CategoryTitle": "Category Title",
                    "TotalReviews": 101
                }]

我需要在相同的Code值的基础上合并这些数组对象,如下所示

      "Combined": [
               {
                    "Date": "2015-04-28T12:30:19.107",
                    "Code": "003UYTX1A",
                    "Title": "Divatex Dots Microfiber Queen Bed In the Bag",
                    "Description": "Go crazy with lots of dots with Divatex,                    
                    "Weight": 7.60,
                    "WeightUnit": "pounds",                    
                    "AverageRating": 4.1,                    
                    "EstimatedSalesPerDay": 761,
                    "ProfitScore": 50,
                    "UpdateStatus": 0,
                    "VersionCode": 23,
                    "Detail":[
                        {
                            "Date": "2015-04-28T12:29:45.95",
                            "Code": "003UYTX1A",
                            "CategoryId": "1055398",
                            "CategoryTitle": "Some Title",
                            "TotalReviews": 31
                        },
                        {
                            "Date": "2015-04-28T12:29:45.95",
                            "Code": "003UYTX1A",
                            "CategoryId": "1055398",
                            "CategoryTitle": "Category Title",
                            "TotalReviews": 101
                        }]
                },
                {
                    "Date": "2015-04-28T12:29:46.66",
                    "Code": "05461AQDV",
                    "Title": "Wilton 1912-1294 100 Count Party Bags",
                    "Description": "Some Description,                    
                    "Weight": 8.10,
                    "WeightUnit": "pounds",                    
                    "AverageRating": 4.0,                    
                    "EstimatedSalesPerDay": 711,
                    "ProfitScore": 45,
                    "UpdateStatus": 0,
                    "VersionCode": 23,
                    "Detail":[
                        {
                            "Date": "2015-04-28T12:29:45.95",
                            "Code": "05461AQDV",
                            "CategoryId": "1055398",
                            "CategoryTitle": "Title",                                                
                            "TotalReviews": 211
                        }]
                }]

有获得所需结果的最佳方法吗? 我必须用JavaScript编写代码。

如果您使用下划线,则可以轻松实现, http://underscorejs.org/

 _.each(products,function(product,index){

        var detail = _.where(details,{'Code' : product.Code})
        if(detail){
                product.details=detail;
         }
         products[index] = product
    })

您可以尝试以下方法:

var output = {Combined: []};
output.Combined = Products.map(function(product){
    var details = Detail.filter(function(detail){
        return detail.Code === product.Code
    }) || [];
    product.Detail = details;
    return product;
});

代码的作用是遍历您的Products ,找到可能为多个甚至为null的匹配Detail ,然后将其合并到关联的产品对象中。

var jObject = {}; 

jObject['Combined'] = Products;

for(var i=0;i<Products.length;i++) {
    for(var j=0;j<Detail.length;j++){
        if(Products[i].Code === Detail[j].Code) {
            if(Products[i].Detail == undefined) {
                Products[i].Detail = [];
                Products[i].Detail.push(Detail[j]);
            } else {
                Products[i].Detail.push(Detail[j]);
            }
        }
    }   
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM