如何提取数组中指定评分元素并重组为目标结构数组?
数组结构转换实现方案
可以通过定义字段映射+遍历收集的方式完成这个结构转换,具体步骤和代码如下:
1. 定义Rating字段与factor的映射关系
先把原数据中带Rating后缀的字段和目标结构里的factor名称一一对应,方便批量处理:
const ratingFactorMap = { carryRating: 'carry', distanceRating: 'distance', obHavoQuruqRating: 'obHavoQuruq', yetkazibBeruvchiningMoliyaviyAhvoliRating: 'yetkazibBeruvchiningMoliyaviyAhvoli', obHavoYogingarchilikQorVaHKRating: 'obHavoYogingarchilikQorVaHK' };
2. 初始化结果数组
基于映射表创建每个factor对应的基础对象:
const newData = Object.entries(ratingFactorMap).map(([_, factor]) => ({ factor }));
3. 遍历原数组填充Rating值
遍历原数组的每个元素,根据索引生成对应的键名(如firstElementOfArray),再把每个Rating值填入对应结果对象:
const originalData = [/* 你的原数组数据 */]; originalData.forEach((item, index) => { // 根据索引匹配目标键名 const elementKey = [ 'firstElementOfArray', 'secondElementOfArray', 'thirdElementOfArray', 'fourthElementOfArray' ][index]; // 遍历所有Rating字段,填充到对应factor对象中 Object.entries(ratingFactorMap).forEach(([ratingKey, factor]) => { const targetObj = newData.find(obj => obj.factor === factor); targetObj[elementKey] = item[ratingKey]; }); });
完整可运行代码
const originalData = [ {"carryRating":21,"distanceRating":72,"obHavoYogingarchilikQorVaHKRating":74,"obHavoQuruqRating":40,"yetkazibBeruvchiningMoliyaviyAhvoliRating":32,"id":1,"direction":"A","distance":"90.55","carry":"365","obHavoQuruq":"50","yetkazibBeruvchiningMoliyaviyAhvoli":"56","obHavoYogingarchilikQorVaHK":"58"}, {"carryRating":35,"distanceRating":74,"obHavoYogingarchilikQorVaHKRating":71,"obHavoQuruqRating":29,"yetkazibBeruvchiningMoliyaviyAhvoliRating":55,"id":2,"direction":"B","distance":"82.46","carry":"589","obHavoQuruq":"36","yetkazibBeruvchiningMoliyaviyAhvoli":"98","obHavoYogingarchilikQorVaHK":"65"}, {"carryRating":19,"distanceRating":76,"obHavoYogingarchilikQorVaHKRating":90,"obHavoQuruqRating":17,"yetkazibBeruvchiningMoliyaviyAhvoliRating":11,"id":3,"direction":"C","distance":"76.16","carry":"326","obHavoQuruq":"21","yetkazibBeruvchiningMoliyaviyAhvoli":"20","obHavoYogingarchilikQorVaHK":"23"}, {"carryRating":25,"distanceRating":78,"obHavoYogingarchilikQorVaHKRating":65,"obHavoQuruqRating":14,"yetkazibBeruvchiningMoliyaviyAhvoliRating":2,"id":4,"direction":"D","distance":"72.11","carry":"421","obHavoQuruq":"17","yetkazibBeruvchiningMoliyaviyAhvoli":"3","obHavoYogingarchilikQorVaHK":"78"} ]; const ratingFactorMap = { carryRating: 'carry', distanceRating: 'distance', obHavoQuruqRating: 'obHavoQuruq', yetkazibBeruvchiningMoliyaviyAhvoliRating: 'yetkazibBeruvchiningMoliyaviyAhvoli', obHavoYogingarchilikQorVaHKRating: 'obHavoYogingarchilikQorVaHK' }; // 初始化结果数组 const newData = Object.entries(ratingFactorMap).map(([_, factor]) => ({ factor })); // 填充每个元素的Rating值 originalData.forEach((item, index) => { const elementKeys = [ 'firstElementOfArray', 'secondElementOfArray', 'thirdElementOfArray', 'fourthElementOfArray' ]; const currentKey = elementKeys[index]; Object.entries(ratingFactorMap).forEach(([ratingKey, factor]) => { const target = newData.find(obj => obj.factor === factor); target[currentKey] = item[ratingKey]; }); }); console.log(newData);
补充说明
- 这种方式无需使用
filter,通过映射表直接关联字段关系,逻辑更贴合需求 - 如果原数组长度变化,可动态生成键名(比如用
${index + 1}thElementOfArray格式),扩展性更强
内容的提问来源于stack exchange,提问作者83hru2
相关产品推荐
相关产品推荐

