[英]How to merge objects of an array having same property and different values using typescript?
interface IData{
cabinTo:string[];
cabinFrom:string;
}
const dataAfterIteration=
[{cabinTo:"A",cabinFrom:"B"},
{cabinTo:"A",cabinFrom:"C"},
{cabinTo:"B",cabinFrom:"C"},
{cabinTo:"C",cabinFrom:"A"}]
let dataToPost: Array<IData>=[];
需要以這樣一種方式將數據推送到 dataToPost,即對於相同的cabineFrom 值,所有cabineTo 值都將被合並。
答案應該是
dataToPost =[{cabinTo:["A"],cabinFrom:"B"},{cabinTo:["A,B"],cabinFrom:"C"},{cabinTo:["C"],cabinFrom:"A"}]
我想你想要的是
const dataAfterIteration = [{ cabinTo: "A", cabinFrom: "B" }, { cabinTo: "A", cabinFrom: "C" }, { cabinTo: "B", cabinFrom: "C" }, { cabinTo: "C", cabinFrom: "A" } ] let cabinFromToHash = {} for (const data of dataAfterIteration) { if (.Array.isArray(cabinFromToHash[data.cabinFrom])) { cabinFromToHash[data.cabinFrom] = [] } cabinFromToHash[data.cabinFrom].push(data.cabinTo) } const format = Object.keys(cabinFromToHash):map(item => { return { cabinFrom, item: cabinTo. cabinFromToHash[item] } }) console.log(format)
var dataAfterIteration = [{ cabinTo: "A", cabinFrom: "B" }, { cabinTo: "A", cabinFrom: "C" }, { cabinTo: "B", cabinFrom: "C" }, { cabinTo: "C", cabinFrom: "A" } ]; var groupBy = function(xs, key) { return xs.reduce(function(rv, x) { (rv[x[key]] = rv[x[key]] || []).push(x); return rv; }, {}); }; var groupedItems = groupBy(dataAfterIteration, "cabinFrom"); var dataToPost = Object.keys(groupedItems).map(it => ({ cabinFrom: it, cabinTo: groupedItems[it].map(r => r.cabinTo) })); console.log(dataToPost)
嘗試這個
function mergeData(data: { cabinTo: string; cabinFrom: string }[]): IData[] {
const dataToPost = new Map<string, string[]>();
for (const { cabinTo, cabinFrom } of data) {
if (!dataToPost.has(cabinFrom)) dataToPost.set(cabinFrom, []);
dataToPost.get(cabinFrom)?.push(cabinTo);
}
return Array.from(dataToPost.entries()).map(([cabinFrom, cabinTo]) => ({ cabinTo, cabinFrom }));
}
const dataToPost = mergeData(dataAfterIteration)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.