Javascript Typescript:相当于linq.GroupBy(key=>;key.IdItem);
我正在尝试执行与Javascript Typescript:相当于linq.GroupBy(key=>;key.IdItem);,javascript,linq,typescript,Javascript,Linq,Typescript,我正在尝试执行与.GroupBy(key=>key.IdItem)等效的操作从linq到typescript 我所尝试的: let parents = value.reduce((parents, parent) => ({ ...ubc, [parent.IdItem]: [...(parents[u.IdItem] || []), parent], }), {}) as Array<ItemsViewModel>
.GroupBy(key=>key.IdItem)等效的操作代码>从linq到typescript
我所尝试的:
let parents = value.reduce((parents, parent) => ({
...ubc,
[parent.IdItem]: [...(parents[u.IdItem] || []), parent],
}), {}) as Array<ItemsViewModel>;
Array.prototype.map.call(parents, parent => {
if (parents.length > 1) {
throw new Error('The input sequence contains more than one element');
}
else if (!parents.length) {
throw new Error('The input sequence is empty');
}
return parent[0];
});
let parents=value.reduce((parents,parent)=>({
…ubc,
[parent.IdItem]:[…(parents[u.IdItem]| |[]),parent],
}),{})作为数组;
Array.prototype.map.call(父级,父级=>{
如果(parents.length>1){
抛出新错误(“输入序列包含多个元素”);
}
否则如果(!parents.length){
抛出新错误(“输入序列为空”);
}
返回父项[0];
});
我做错了什么?你可以这样试试--
此外,如果您只是想要唯一的父项,那么可以使用seed id的哈希集--
你可以这样试试--
此外,如果您只是想要唯一的父项,那么可以使用seed id的哈希集--
您正在还原为一个对象,它不是一个数组。介意提供一个value
的示例吗?您正在还原为一个对象,它不是数组。介意提供一个value
的示例吗?
let parentsById =
value.reduce((dict, parent) => {
let { IdItem } = parent;
dict[IdItem] = dict[IdItem] || [];
dict[IdItem].push(parent);
return dict;
}, {});
let result =
Object.keys(parentsById)
.map(k => {
let parents = parentsById[k];
if(parents.length !== 1) { throw new Error("Must contain a single item"); }
return parents[0];
});
let result = [];
let seenIds = {};
for(let parent of value) {
let { IdItem } = parent;
if(!seenIds[IdItem]) {
result.push(parent);
seenIds[IdItem] = true;
}
}