在多维javascript数组中分组数据
我有一个多维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以找到解决方案。。
// 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) };