如何为数组每个对象匹配添加对应单个保单编号?
问题:为旅行者信息匹配对应保单编号
我有两个数组travelersInfo和generatedPolicyNumbers,各自包含3个元素,想要给travelersInfo中的每个对象添加对应的单个policyNumber属性。但当前代码执行后,每个对象的policyNumber都被赋值为所有保单编号组成的数组,而非单个对应编号,需要修正代码实现对应匹配的效果。
原代码
const travelersInfoWithPolicyNumbers = payload.travelersInfo.map((traveler) => ({ ...traveler, policyNumber: generatedPolicyNumbers.map( (policyNumber: { policyNumber: string }) => policyNumber.policyNumber ), }))
原始数据
payload.travelersInfo
[ { firstName: 'test', lastName: 'test', age: 30 }, { firstName: 'test1', lastName: 'test1', age: 35 }, { firstName: 'test2', lastName: 'test2', age: 50 } ]
generatedPolicyNumbers
[ { "policyNumber": "TRB200" }, { "policyNumber": "TRB201" }, { "policyNumber": "TRB202" } ]
实际输出
[ { firstName: 'test', lastName: 'test', age: 30, policyNumber: [ "TRB200", "TRB201", "TRB202" ] }, { firstName: 'test1', lastName: 'test1', age: 35, policyNumber: [ "TRB200", "TRB201", "TRB202" ] }, { firstName: 'test2', lastName: 'test2', age: 50, policyNumber: [ "TRB200", "TRB201", "TRB202" ] } ]
预期输出
[ { firstName: 'test', lastName: 'test', age: 30, policyNumber: "TRB200", }, { firstName: 'test1', lastName: 'test1', age: 35, policyNumber: "TRB201", }, { firstName: 'test2', lastName: 'test2', age: 50, policyNumber: "TRB202", } ]
修正方案
原代码的问题在于:遍历travelersInfo时,又对generatedPolicyNumbers做了一次完整的map,导致每个旅行者对象都拿到了所有保单号组成的数组。正确的做法是利用map方法的第二个参数——当前元素的索引,通过索引直接匹配对应位置的保单号。
修正后的代码:
const travelersInfoWithPolicyNumbers = payload.travelersInfo.map((traveler, index) => ({ ...traveler, policyNumber: generatedPolicyNumbers[index].policyNumber }))
说明
map方法的第二个参数index代表当前遍历到的旅行者在数组中的位置,用这个索引去generatedPolicyNumbers中取出对应位置的保单号对象,再提取其policyNumber属性,就能实现每个旅行者匹配对应单个保单编号的效果。
执行修正后的代码,即可得到预期的输出结果。
内容的提问来源于stack exchange,提问作者Barry_Hammer
相关产品推荐
相关产品推荐

