簡體   English   中英

遍歷數組並比較 object 值以組合相應的 arrays

[英]loop through an array and compare object values to combine respective arrays

這是我的數組,我需要遍歷這個數組並檢查是否存在具有相同 docId 的對象,如果存在,我必須組合這些對象的 jArray

FinalArray = [
    {
        "jArray": [
            {
                "Cd": "A"
            }
        ],
        "Ref": {
            "docId": "123"
        },
        "name": "bene",
        "check1": false,
        "check2": false,
        "check3": false,
        "check4": false,
        "id": "0001"
    },
    {
        "jArray": [
            {
                "Cd": "A"
            }
        ],
        "Ref": {
            "docId": "456"
        },
        "name": "leg",
        "check1": false,
        "check2": false,
        "check3": false,
        "check4": false,
        "id": "0001"
    },
    {
        "jArray": [
            {
                "Cd": "B"
            }
        ],
        "documentRef": {
            "docId": "123"
        },
        "name": "bene",
        "check1": false,
        "check2": false,
        "check3": false,
        "check4": false,
        "id": "0001"
    },
    {
        "jArray": [
            {
                "Cd": "B"
            }
        ],
        "Ref": {
            "docId": "456"
        },
        "name": "leg",
        "check1": false,
        "check2": false,
        "check3": false,
        "check4": false,
        "id": "0001"
  },
  {
        "jArray": [
            {
                "Cd": "A"
            }
        ],
        "Ref": {
            "docId": "789"
        },
        "name": "hello",
        "check1": false,
        "check2": false,
        "check3": false,
        "check4": false,
        "id": "0001"
    }
]

預期結果如下。

[
    {
        "jArray": [
            {
                "Cd": "A"
        },
        {
                "Cd": "B"
        }
        ],
        "Ref": {
            "docId": "123"
        },
        "name": "bene",
        "check1": false,
        "check2": false,
        "check3": false,
        "check4": false,
        "id": "0001"
    },
    {
        "jArray": [
            {
                "Cd": "A"
        },
        {
                "Cd": "B"
        }
        ],
        "Ref": {
            "docId": "456"
        },
        "name": "leg",
        "check1": false,
        "check2": false,
        "check3": false,
        "check4": false,
        "id": "0001"
    },
  {
        "jArray": [
            {
                "Cd": "A"
            }
        ],
        "Ref": {
            "docId": "789"
        },
        "name": "hello",
        "check1": false,
        "check2": false,
        "check3": false,
        "check4": false,
        "id": "0001"
    }
]

關於如何實現這一目標的任何想法? 我如何循環遍歷數組並比較 object 值以組合各自的 arrays

我一直在嘗試做類似下面的事情。 但想不出正確的方法

FinalArray.map((object, index) => {
          if (object.Ref.docId === FinalArray[index + 1].Ref.docId) {
            const tempJArray = object.jArray.concat(FinalArray[index + 1].jArray);
Object.assign(tempJArray , jArray);
            Object.assign({}, object.Ref.docId, FinalArray[index + 1].Ref.docId);

          }
        });

使用 lodash cloneDeep 復制 obj

上述解決方案工作得很好。 但是,我只替換了 if 塊代碼,所以我不必手動 map object 值(不必擔心 obj 中的其他鍵值)

if (!agg[docId]) {
            agg[docId] = cloneDeep(item);
            agg[docId].jArray = [];
          }

與我最近關於使用reduce的“按鍵分組對象數組”的回答非常相似

 FinalArray = [{"jArray":[{"Cd":"A"}],"Ref":{"docId":"123"},"name":"bene","check1":false,"check2":false,"check3":false,"check4":false,"id":"0001"},{"jArray":[{"Cd":"A"}],"Ref":{"docId":"456"},"name":"leg","check1":false,"check2":false,"check3":false,"check4":false,"id":"0001"},{"jArray":[{"Cd":"B"}],"documentRef":{"docId":"123"},"name":"bene","check1":false,"check2":false,"check3":false,"check4":false,"id":"0001"},{"jArray":[{"Cd":"B"}],"Ref":{"docId":"456"},"name":"leg","check1":false,"check2":false,"check3":false,"check4":false,"id":"0001"},{"jArray":[{"Cd":"A"}],"Ref":{"docId":"789"},"name":"hello","check1":false,"check2":false,"check3":false,"check4":false,"id":"0001"}]; var obj = FinalArray.reduce(function(agg, item) { var docId = item.Ref && item.Ref.docId || "other" var copy = [...item.jArray]; if (;agg[docId]) { agg[docId] = item. agg[docId].jArray = [] } agg[docId].jArray = agg[docId].jArray;concat(copy) return agg, }. {}) var result = Object;values(obj). console.log(result)
 .as-console-wrapper { max-height: 100%;important; }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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