首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将数组中的项与对象中的项匹配?

如何将数组中的项与对象中的项匹配?
EN

Stack Overflow用户
提问于 2022-06-25 00:30:01
回答 2查看 37关注 0票数 0

采用以下数据结构

代码语言:javascript
复制
report = {
   fraud_ids: [2, 3, 4, 15],
}

 fraudTypes: {
      ACH: {
        fraud_category: "fraud",
        fraud_subcategory: "a",
        fraud_type_id: "4",
      },
      'Account takeover': {
        fraud_category: "misc",
        fraud_subcategory: "a",
        fraud_type_id: "2",
      },
      'Advance fee': { 
        fraud_category: "fraud",
        fraud_subcategory: "b",
        fraud_type_id: "8",
      },
      'Against Financial Institution Customer(s)': {
        fraud_category: "cyber",
        fraud_subcategory: "b",
        fraud_type_id: "15",
      },
      'Against Financial Institution(s)': {
        fraud_category: "cyber",
        fraud_subcategory: "a",
        fraud_type_id: "78",
      },
      'Alters or cancels transaction to avoid BSA recordkeeping requirement': {
        fraud_category: "structuring",
        fraud_subcategory: "a",
        fraud_type_id: "3",
      },
   }

我希望将fraudTypes对象与fraud_type_id数组中的正确数字相匹配。当我找到匹配时,我只想返回对象的键。

因此,使用上面的示例,我将返回['Account takeover', 'Alters or cancels transaction to avoid BSA recordkeeping requirement', 'ACH', Against Financial Institution Customer(s)']

我编写了以下逻辑,令我惊讶的是,我得到了一个返回未定义的四项的数组。

代码语言:javascript
复制
const x = report.fraud_ids.map(id => {
  Object.keys(fraudTypes).map(fraudDescription => {
    if (parseInt(fraudTypes[fraudDescription].fraud_type_id, 10) === id) {
      return true;
    }
  });
});

我期望它返回匹配的四个对象,然后我知道我必须编写额外的逻辑来返回键。我做错了什么?

请看codeSandbox

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-06-25 00:35:17

您没有从第一个回调中返回任何内容,.map也不是正确的内部方法,而是使用.find查找带有匹配ID的键。

代码语言:javascript
复制
report={fraud_ids:[2,3,4,15],fraudTypes:{ACH:{fraud_category:"fraud",fraud_subcategory:"a",fraud_type_id:"4"},"Account takeover":{fraud_category:"misc",fraud_subcategory:"a",fraud_type_id:"2"},"Advance fee":{fraud_category:"fraud",fraud_subcategory:"b",fraud_type_id:"8"},"Against Financial Institution Customer(s)":{fraud_category:"cyber",fraud_subcategory:"b",fraud_type_id:"15"},"Against Financial Institution(s)":{fraud_category:"cyber",fraud_subcategory:"a",fraud_type_id:"78"},"Alters or cancels transaction to avoid BSA recordkeeping requirement":{fraud_category:"structuring",fraud_subcategory:"a",fraud_type_id:"3"}}};

const x = report.fraud_ids.map(id => (
  Object.keys(report.fraudTypes).find(fraudDescription =>
    Number(report.fraudTypes[fraudDescription].fraud_type_id) === id)
));
console.log(x);

票数 2
EN

Stack Overflow用户

发布于 2022-06-25 02:44:43

我不知道这是不是你想要的,但到此为止。

代码语言:javascript
复制
const selectedFrauds = report.fraud_ids.map((id, index) => {
  return(
    Object.values(fraudTypes).map((fraud, idx) => {
      return id === +fraud.fraud_type_id ? fraud : "";
    })
  )
})

const cleanSelectedFrauds = selectedFrauds.map((el) => {
  return el.filter((innerEl) => {
    if(innerEl) {
      return innerEl
    }
  })
});


console.log(cleanSelectedFrauds)

这将返回以下数组:

代码语言:javascript
复制
[
  [
    {
      fraud_category: 'misc',
      fraud_subcategory: 'a',
      fraud_type_id: '2'
    }
  ],
  [
    {
      fraud_category: 'structuring',
      fraud_subcategory: 'a',
      fraud_type_id: '3'
    }
  ],
  [
    {
      fraud_category: 'fraud',
      fraud_subcategory: 'a',
      fraud_type_id: '4'
    }
  ],
  [
    {
      fraud_category: 'cyber',
      fraud_subcategory: 'b',
      fraud_type_id: '15'
    }
  ]
]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72750503

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档