我将匹配的对象映射到ID属性值匹配的对象。
到目前为止,reduce和map适用于ID
和Fet
属性。
但现在我想将 Name 属性映射到每个新的映射对象。我确实尝试了以下操作,但这会创建一个新的Object,与其他Name
值分开。
如何将匹配的属性值映射到对象?
https://jsfiddle.net/brianVarley/zs8xadht/
这是我尝试获取Name
映射:
const arr = [{ ID:12, Fet: "Donuts", Name: "DD" } , { ID: 12, Fet: "Cake", Name: "DD" }, { ID: 13, Fet: "Lemon", Name: "CC"}] ;
const grouped = arr.reduce((a,v) => {
if( !(v.ID in a) ) a[v.ID] = [];
a.Name = v.Name
a[v.ID].push(v.Fet);
return a;
},{});
var newArrayOfReducedObjects = Object.keys(grouped).map(key => {
return { ID: key, Name: key, Fet: grouped[key] };
});
console.log(newArrayOfReducedObjects);
答案 0 :(得分:1)
我认为你应该使用泛型group by函数,你可以使用各种键来处理一个对象数组。
var customGroupBy = function(xs, key) {
return xs.reduce(function(rv, x) {
(rv[x[key]] = rv[x[key]] || []).push(x);
return rv;
}, {});
};
然后您可以为任何键调用此函数:
customGroupBy (arr,"ID")
customGroupBy (arr,"Name")
上面的最后一次调用将导致(JSONified)
"{"DD":[{"ID":12,"Fet":"Donuts","Name":"DD"},{"ID":12,"Fet":"Cake","Name":"DD"}],"CC":[{"ID":13,"Fet":"Lemon","Name":"CC"}]}"