Javascript 将数组分组为更复杂的数组 我从数据库查询创建一个对象数组,并调用 数组jobListRecords。创建的数组中有多条记录具有相同的“customerID”和“name” 我想创建一个新的数组,其中每个客户都有一条记录,并有一个新字段“jobArray”,其中包含所有客户服务的另一个数组。(请参见下面的sortCustomer阵列)

Javascript 将数组分组为更复杂的数组 我从数据库查询创建一个对象数组,并调用 数组jobListRecords。创建的数组中有多条记录具有相同的“customerID”和“name” 我想创建一个新的数组,其中每个客户都有一条记录,并有一个新字段“jobArray”,其中包含所有客户服务的另一个数组。(请参见下面的sortCustomer阵列),javascript,arrays,object,underscore.js,Javascript,Arrays,Object,Underscore.js,初始数组的一个示例: jobListRecords = [ { "customerID" : "1", "name" : "Larry Bird", "serviceID" : "101", "serviceName" : "Dog Walking" }, { "customerID" : "2", "name" : "Andrew Luck", "serviceID" : "202", "serviceN

初始数组的一个示例:

jobListRecords = [
    { 
    "customerID" : "1",
    "name" : "Larry Bird",
    "serviceID" : "101",
    "serviceName" : "Dog Walking"
    },
    {
    "customerID" : "2",
    "name" : "Andrew Luck",
    "serviceID" : "202",
    "serviceName" : "Baby Sitting"
    },
    {
    "customerID" : "2",
    "name" : "Andrew Luck",
    "serviceID" : "101",
    "serviceName" : "Dog Walking"
    }
]
期望结果

sortCustomer示例:

sortCustomer = [
   {
   "customerID" : "1",
   "name" : " Larry Bird",
   "jobArray" : [
           {
           "serviceID" : "101",
           "serviceName" : "Dog Walking"
           }
        ]
    },
    {
    "customerID" : "2",
    "name" : "Andrew Luck",
    "jobArray" : [
            {
            "serviceID" : "202",
            "serviceName" : "Baby Sitting"
            },
            {
           "serviceID" : "101",
            "serviceName" : "Dog Walking"
            }
        ]
    }
这是一种简单或有效的解决方法,而无需对所有数据重复3次以上。谢谢你的时间,下面是我尝试过的几件事情之一

jobListGrouped = _
    .chain(jobListRecords)
    .groupBy('customerID')
    .map(function(value, key) {
        return {
            CustomerID: key,
            services: _.pluck(value, 'serviceID')
        }
    })
    .value();
我试着用我找到的一个例子来解决这个问题,但它将所有ServiceID组合在一起,这不是我所需要的

我尝试了一个不起作用的例子

jobListGrouped = _
    .chain(jobListRecords)
    .groupBy('customerID')
    .map(function(value, key) {
        return {
            CustomerID: key,
            services: _.pluck(value, 'serviceID')
        }
    })
    .value();

您将
仅将
serviceIDs
提取到该数组中。相反,你需要做一些类似的事情

.map(function(values, key) {
    return {
        customerID: key,
        name: values[0].name.
        services: _.map(values, _.partial(_.pick, _, 'serviceID', 'serviceName'))
    }
})
或者更明确

.map(function(values, key) {
    return _.extend(_.omit(values[0], 'serviceID', 'serviceName'), {
        services: _.map(values, _.partial(_.pick, _, 'serviceID', 'serviceName'))
    }
})

(其中,
partial
调用与
function(value){return_uu.pick(value,'serviceID','serviceName');}
相同)

当我尝试您的第一个示例时,它产生了我正在寻找的结构,但服务字段是一个空对象数组。对象数正确,但为空。我还将尝试更显式的选项。我使用了第一个解决方案,但用函数(value){return uu.pick(value,'serviceID','serviceName');}替换了u.partial,这很有效。你知道为什么会这样吗?我已将您标记为正确。您的下划线版本可能不支持将
作为
部分
的省略参数?