为了账号安全,请及时绑定邮箱和手机立即绑定

从两个不同的对象数组中选择数据以创建一个新的对象数组

从两个不同的对象数组中选择数据以创建一个新的对象数组

蛊毒传说 2022-07-21 20:58:19
我有以下对象数组:const formulas =[    { "formulaID": "1", "versionID": 1, "formulaClass": 3, "formulaType": "34", "outputName": "Chocolate Milk 2%" },    { "formulaID": "4", "versionID": 1, "formulaClass": 3, "formulaType": "17", "outputName": "Hazelnut Creamer" },    { "formulaID": "6", "versionID": 1, "formulaClass": 3, "formulaType": "23", "outputName": "White Milk 2%" }];const yields =[    { "formulaID": "4", "versionID": 1, "yieldFactor": 0.93 },    { "formulaID": "4", "versionID": 2, "yieldFactor": 0.98 },    { "formulaID": "6", "versionID": 1, "yieldFactor": 0.95 },    { "formulaID": "7", "versionID": 1, "yieldFactor": 0.85 }];并尝试以编程方式创建此输出:const result =[    { "formulaID": "7", "versionID": 1, "yieldFactor": 0.85, "outputName": "" },    { "formulaID": "4", "versionID": 1, "yieldFactor": 0.93, "outputName": "Hazelnut Creamer" },    { "formulaID": "4", "versionID": 2, "yieldFactor": 0.98, "outputName": "" },    { "formulaID": "6", "versionID": 1, "yieldFactor": 0.95, "outputName": "White Milk 2%" }];在这篇文章的帮助下,我编写了以下代码:const result = yields.map(yld => ({    formulaID: yld.formulaID,    versionID: yld.versionID,    yieldFactor: yld.yieldFactor,    outputName: formulas.filter(f => (f.formulaID + '-' + f.versionID).includes(yld.formulaID + '-' + yld.versionID))}));console.log(result);它接近预期的结果,但我不确定如何仅隔离outputName. 在其当前状态下,它给出了找到匹配项的整个数组。对于原始源数据数组之间不匹配的位置,如何仅显示outputName匹配项和空字符串?outputName编辑 - 当前输出如下所示:
查看完整描述

1 回答

?
UYOU

TA贡献1878条经验 获得超4个赞

Using.filter将始终返回满足您条件的公式数组,因此您需要先检查它是否给出结果,然后仅从.outputName其结果中检索。


可能是这样的:


const result = yields.map(yld => {

  const targetFormulas = formulas.filter(f => (f.formulaID + '-' + f.versionID).includes(yld.formulaID + '-' + yld.versionID));

  const outputName = targetFormulas.length ? targetFormulas.map(f => f.outputName).join(',') : ''

  return {

    formulaID: yld.formulaID,

    versionID: yld.versionID,

    yieldFactor: yld.yieldFactor,

    outputName

  }

});

我用a.join(',')来返回用逗号分隔的outputNames,如果有超过1个。

如果你确定只会返回1个,你可以这样做 targetFormulas.map(f => f.outputName)[0]


这将返回以下结果


[

   {

      "formulaID":"4",

      "versionID":1,

      "yieldFactor":0.93,

      "outputName":"Hazelnut Creamer"

   },

   {

      "formulaID":"4",

      "versionID":2,

      "yieldFactor":0.98,

      "outputName":""

   },

   {

      "formulaID":"6",

      "versionID":1,

      "yieldFactor":0.95,

      "outputName":"White Milk 2%"

   },

   {

      "formulaID":"7",

      "versionID":1,

      "yieldFactor":0.85,

      "outputName":""

   }

]


查看完整回答
反对 回复 2022-07-21
  • 1 回答
  • 0 关注
  • 162 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号