這是我的陣列,我需要遍歷這個陣列并檢查是否存在具有相同 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"
}
]
關于如何實作這一目標的任何想法?我如何回圈遍歷陣列并比較物件值以組合各個陣列
我一直在嘗試做類似下面的事情。但想不出正確的方法
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);
}
});
uj5u.com熱心網友回復:
與我最近關于“按鍵分組物件陣列”的回答非常相似reduce
var 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 before = JSON.stringify(FinalArray);
var obj = FinalArray.reduce(function(agg, item) {
var docId = item.Ref && item.Ref.docId || "other"
var copy = [...item.jArray];
if (!agg[docId]) {
agg[docId] = {
jArray: [],
Ref: { docId },
name: item.name,
id: item.id,
// etc
}
}
agg[docId].jArray = agg[docId].jArray.concat(copy)
return agg;
}, {})
var result = Object.values(obj);
console.log(result)
var after = JSON.stringify(FinalArray);
console.log(before===after)
.as-console-wrapper {
max-height: 100% !important;
}
uj5u.com熱心網友回復:
使用 lodash cloneDeep 復制 obj
上述解決方案作業得很好。但是,我只替換了 if 塊代碼,所以我不必手動映射物件值(不必擔心 obj 中的其他鍵值)
if (!agg[docId]) {
agg[docId] = cloneDeep(item);
agg[docId].jArray = [];
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/504544.html
標籤:javascript 数组 目的 级联 数组组合