首页 > 解决方案 > 遍历 2 个包含对象的数组并使用第一个数组键返回第二个数组的值

问题描述

我正在尝试用户.map()映射 2 个数组并使用 arr1 的现有键值返回一个带有新键和值的结果数组

我正在使用以下数组

arr1 = [
    {"name":"orange","mappedHeader":"dollar"},
    {"name":"apple","mappedHeader":"coin"}
];

arr2 = [
    {"orange":"red","pumpkin":"white","apple":"yellow", "plum":"green"},
    {"orange":"pink","pumpkin":"brown","apple":"gold","plum":"blue"},
];

whatIWant = [
    {"dollar":"red", "coin":"yellow"},
    {"dollar":"pink", "coin","gold"}
];

我试过使用.map().filter()但我似乎没有正确实施

请帮忙

标签: javascriptarraysforeacharray.prototype.map

解决方案


arr1 包含映射的字段和标题

var arr1 = [
    {"name":"orange","mappedHeader":"dollar"},
    {"name":"apple","mappedHeader":"coin"}
];

arr2 包含我们将要转换的对象

var arr2 = [
    {"orange":"red","pumpkin":"white","apple":"yellow", "plum":"green"},
    {"orange":"pink","pumpkin":"brown","apple":"gold","plum":"blue"},
];

解决方案

//var whatIWant = [
//    {"dollar":"red", "coin":"yellow"},
//    {"dollar":"pink", "coin","gold"}
//];

var whatIWant = arr2.map(item=>{ /* Step 1*/
    let obj = {};
    arr1.forEach((v,i,a)=>obj[v.mappedHeader] = item[v.name]); /* Step 2 */
    return obj; /* Step 3 */
})

一步步

  • 使用 .map(...) 迭代对象
  • 使用 forEach(...) 将每个字段映射到新的空对象,从项目中获取值并使用mappedHeader属性名称item[v.name]设置具有该值的新字段,obj[v.mappedHeader] = ...
  • 返回 obj 作为新返回列表/数组的新对象

推荐阅读