如何通过数组值匹配生成指定结构的JavaScript新数组?
如何通过ID匹配生成指定结构的数组
现有两个JavaScript数组:
第一个是车辆分类列表:
const vehicleList = [ { "_id": "6294790e2fe156d20868b39e", "category_id_tr": "Motosiklet", "category_name_tr": "A1", "category_desc_tr": "Silindir hacmi 125 santimetreküpü, gücü 11 kilovatı ve gücünün ağırlığına oranı 0,1’i geçmeyen, sepetli veya sepetsiz iki tekerlekli motosikletler ile gücü 15 kilovatı geçmeyen üç tekerlekli motosikletler.", "limit_age_tr": 16, "validity_years_tr": 10 }, { "_id": "6294790e2fe156d20868b39f", "category_id_tr": "Motosiklet", "category_name_tr": "A2", "category_desc_tr": "Gücü 35 kilovatı ve gücünün ağırlığına oranı 0,2’yi geçmeyen, sepetli veya sepetsiz iki tekerlekli motosikletler ile gücü 15 kilovatı geçmeyen üç tekerlekli motosikletler.", "limit_age_tr": 18, "validity_years_tr": 10 } ]
第二个是允许的车辆ID数组:
const allowedVehicle = ['6294790e2fe156d20868b39e', '6294790e2fe156d20868b39f']
需要将allowedVehicle中的ID与vehicleList里对象的_id匹配,生成如下结构的新数组:
[ { "value":"6294790e2fe156d20868b39e", "label": "A1" }, { "value":"6294790e2fe156d20868b39f", "label": "A2" }, ]
方法1:filter + map 组合实现
先筛选出vehicleList中_id在allowedVehicle内的项,再将这些项转换为目标格式:
const result = vehicleList .filter(vehicle => allowedVehicle.includes(vehicle._id)) .map(vehicle => ({ value: vehicle._id, label: vehicle.category_name_tr }));
这种写法逻辑直观,适合数据量较小的场景。
方法2:构建映射表(高效版)
如果数据量较大,先通过reduce构建ID到分类名称的映射表,再遍历allowedVehicle生成结果,能大幅提升查找效率:
// 构建ID与分类名称的映射 const vehicleMap = vehicleList.reduce((map, vehicle) => { map[vehicle._id] = vehicle.category_name_tr; return map; }, {}); // 生成目标数组 const result = allowedVehicle.map(id => ({ value: id, label: vehicleMap[id] }));
该方法的时间复杂度为O(m+n)(m为vehicleList长度,n为allowedVehicle长度),比方法1的O(m*n)更高效。
内容的提问来源于stack exchange,提问作者Programmer
相关产品推荐
相关产品推荐

