这是 this one 的后续问题,尽管两者在操作上无关
<小时/>从这种结构开始:
[ [{ field: "field1", term: "val1"},
{ field: "field2", term: "val2"}
],
[{ field: "field3", term: "val3"},
{ field: "field3", term: "val4"},
{ field: "field4", term: "val5"}
],
[{ field: "field3", term: "val6"},
{ field: "field2", term: "val7"},
{ field: "field3", term: "val8"},
{ field: "field1", term: "val9"},
{ field: "field2", term: "val10"}
]
]
我需要迭代每个子数组,并且对于里面的每个对象,当键field
相同时,将键term
的值聚合到一个数组中;并且在同一场合将关键 term
的所有值包装在一个数组中,以便稍后简单起见。最终结果如下:
[ [{ field: "field1", term: ["val1"]},
{ field: "field2", term: ["val2"]}
],
[{ field: "field3", term: ["val3", "val4"},
{ field: "field4", term: ["val5"]}
],
[{ field: "field3", term: ["val6", "val8"]},
{ field: "field2", term: ["val7", "val10"]},
{ field: "field1", term: ["val9"]}
]
]
<小时/>
我尝试过对每个对象使用 _.reduce
,得到了相对接近的结果,但从未完全达到目标。根本不掌握这种模式,我不相信 reduce
是可行的方法
有什么想法或指示吗?两天来一直在尝试包装这个......:S
谢谢
最佳答案
好吧,您可以为每个数组创建一个新对象,该对象以“field”值作为键,以“term”数组作为值。然后您可以将其转换回原始形式的对象。
var newArray = array.map(function( subArray ) {
var obj = subArray.reduce(function(m, o) {
if (o.field in m)
m[o.field].push(o.term);
else
m[o.field] = [o.term];
return m;
}, {});
return Object.keys(obj).map(function(field) {
return { field: field, term: obj[field] };
});
});
关于javascript - JS : Reorganize objects inside an array based on value of a particular key (reduce?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23048682/