簡體   English   中英

如何使用 typescript 合並具有相同屬性和不同值的數組的對象?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM