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>=[];
Need to push the data to dataToPost in such a way that for same cabinFrom value all the cabinTo value will be merged.
Answer should be
dataToPost =[{cabinTo:["A"],cabinFrom:"B"},{cabinTo:["A,B"],cabinFrom:"C"},{cabinTo:["C"],cabinFrom:"A"}]
I think what you want is
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)
try this
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)
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.