Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在多维javascript数组中分组数据_Javascript_Jquery_Arrays - Fatal编程技术网

在多维javascript数组中分组数据

在多维javascript数组中分组数据,javascript,jquery,arrays,Javascript,Jquery,Arrays,我有一个多维javascript数组,其中填充了大量冗余数据,我希望这些数据按其内部的元素组合在一起 // current array pGroup = ([pm, name]); // [0][0] = pm0, [0][1] = name0 ... [n][0] = pmn, [n][1] = namen 我的目标是过滤掉所有冗余的pm,然后将这些名称分组到一个数组中,并附加到它们各自的名称上 我尝试了几次失败的$.grep、$.filter组合,并稍微修改了下划线.js以找到解决方案。。

我有一个多维javascript数组,其中填充了大量冗余数据,我希望这些数据按其内部的元素组合在一起

// current array
pGroup = ([pm, name]); // [0][0] = pm0, [0][1] = name0 ... [n][0] = pmn, [n][1] = namen
我的目标是过滤掉所有冗余的pm,然后将这些名称分组到一个数组中,并附加到它们各自的名称上

我尝试了几次失败的$.grep、$.filter组合,并稍微修改了下划线.js以找到解决方案。。但到目前为止我还是空着的

如能提供任何解决方案的指导,将不胜感激

编辑:

//电流阵列

pGroup [

    [0]
    0: "Whimpenny, Walter"
    1: "105495-005_SMS M&S Option Year 1"
    ,

    [1]
    0: "Whimpenny, Walter"
    1: "105495-005_SMS M&S Option Year 2"
    , 

    [2]
    0: "Sukumar, Prasanna"
    1: "DISA-JCSS/Staff Aug-SO #203868" 

]
//要求的结果

pGroup [

    [0] 0: "Whimpenny, Walter" 1: ["105495-005_SMS M&S Option Year 1", "105495-005_SMS M&S Option Year 2"]

    [1] 0: "Sukumar, Prasanna" 1: ["DISA-JCSS/Staff Aug-SO #203868" ]

]

使用键入名称的对象对值进行分组

var result_obj = {};
$.each(pGroup, function(i, e) {
    var name = e[0], val = e[1];
    if (result_obj[name]) {
        result_obj[name].push(val);
    } else {
        result_obj[name] = [val];
});
然后将它们收集回一个数组中

pGroup = [];
$.each(result_obj, function(i, e) {
    pGroup.push([i, e]);
});
但是,我建议您不要对结果使用多维数组。数组应用于统一、有序的集合。您的第二个维度不是统一的,它应该是这样一个对象:

$.each(result_obj, function(i, e) {
    pGroup.push({name: i, values: e});
});

以下是使用Lo Dash的功能解决方案:

var grouped = _.map(_.groupBy(pGroup, 0), function (el) {
    return [el[0][0], _.pluck(el, 1)];
});


或者,您可以将
return
行更改为以下内容,以在最终产品中生成对象而不是数组,如下所示:


你能给出输入及其相应输出的实际示例吗?当然,我用示例编辑了这篇文章。虽然我明白@Barmar关于使用对象而不是数组的观点,但解决方案非常有效。@Tabaker78是的,在这种情况下,对象可能是更好的选择。如果您选择这样做,那么将此解决方案转换为使用对象将非常容易。
return { name: el[0][0], values: _.pluck(el, 1) };