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