我如何匹配项目在我的数组与项目在我的对象?



采用以下数据结构

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",
},
}

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

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

我编写了以下逻辑,令我惊讶的是,我得到了一个包含四个元素的数组,返回undefined。

const x = report.fraud_ids.map(id => {
Object.keys(fraudTypes).map(fraudDescription => {
if (parseInt(fraudTypes[fraudDescription].fraud_type_id, 10) === id) {
return true;
}
});
});

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

请参阅codeSandbox。

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

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);

我不知道这是不是你想要的,但是就是这样。

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)

这将返回以下数组:

[
[
{
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'
}
]
]

最新更新