JavaScript 将 id 从一个对象数组映射到另一个对象数组

问题描述 投票:0回答:1

const rowData = [];
const arr1 = [{
    "bId": "F1.1.4",
    "bName": "Mercedes",
    "cId": "150494",
    "cName": "Benz",
    "flag": "Maintain"
  },
  {
    "bId": "F1.1.4",
    "bName": "Ford",
    "cId": "150744",
    "cName": "Mustang",
    "flag": "Maintain"
  },
  {
    "bId": "F1.1.4",
    "bName": "Volkswagon",
    "cId": "4961",
    "cName": "Polo",
    "flag": "Maintain"
  },
  {
    "bId": "F1.1.5",
    "bName": "Isdera",
    "cId": "N/A",
    "cName": "Isdera",
    "flag": "Test"
  }
]

const arr2 = [{
    "cId": "150494",
    "flag": "Decommission"
  },
  {
    "cId": "150744",
    "flag": "Invest"
  },
  {
    "cId": "4961",
    "flag": "Pending"
  }
]

for (let i = 0; i < arr1.length; i++) {
  const obj = {
    custId: arr1[i].cId,
    custName: arr1[i].cName,
    bId: arr1[i].bId,
    bufName: arr1[i].bName,
    impFlag: arr2.filter(({cId}) => cId === arr1[i].cId).map(({flag}) => (flag)).toString()
  };
  rowData.push(obj);
}
console.log(rowData)

嗨,我正在检查

cId
中的
arr2
是否存在于
arr1
中,并基于此我更新存在 cId 的标志,但对于 arr2 中不存在的其余值,impFlag即将到来
""
。它应该与 arr1 中的相同。我不知道如何相应地添加条件??

javascript json typescript javascript-objects
1个回答
1
投票

由于

""
是您通过调用 Array.prototype.toString()
 获得的唯一 
falsy
值,因此您可以使用
||
(OR)
运算符在没有匹配标志时提供默认值,例如:

arr2.filter(...).map(...).toString() || arr1[i].flag

上面,当

.toString()
产生假
""
值时,
||
运算符的右侧将用作结果。

const rowData = [];
const arr1 = [{
    "bId": "F1.1.4",
    "bName": "Mercedes",
    "cId": "150494",
    "cName": "Benz",
    "flag": "Maintain"
  },
  {
    "bId": "F1.1.4",
    "bName": "Ford",
    "cId": "150744",
    "cName": "Mustang",
    "flag": "Maintain"
  },
  {
    "bId": "F1.1.4",
    "bName": "Volkswagon",
    "cId": "4961",
    "cName": "Polo",
    "flag": "Maintain"
  },
  {
    "bId": "F1.1.5",
    "bName": "Isdera",
    "cId": "N/A",
    "cName": "Isdera",
    "flag": "Test"
  }
]

const arr2 = [{
    "cId": "150494",
    "flag": "Decommission"
  },
  {
    "cId": "150744",
    "flag": "Invest"
  },
  {
    "cId": "4961",
    "flag": "Pending"
  }
]

for (let i = 0; i < arr1.length; i++) {
  const obj = {
    custId: arr1[i].cId,
    custName: arr1[i].cName,
    bId: arr1[i].bId,
    bufName: arr1[i].bName,
    impFlag: arr2.filter(({cId}) => cId === arr1[i].cId).map(({flag}) => (flag)).toString() || arr1[i].flag
  };
  rowData.push(obj);
}
console.log(rowData)

© www.soinside.com 2019 - 2024. All rights reserved.