使用第一个数组键遍历 2 个包含对象和 return 第二个数组的值的数组

Iterate through 2 arrays containing objects and return the values of a second array using the first arrays keys

我正在尝试让用户 .map() 映射 2 个数组和 return 使用 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() 但我似乎没有正确实施它

请帮忙

arr1 包含映射字段和 headers

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

arr2 包含 object 个我们将要转换的

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(...) 进行迭代 objects
  • 使用 forEach(...) 将每个字段映射到新的空字段 object,从项目 item[v.name] 中获取值并使用 mappedHeader[= 设置具有该值的新字段29=]属性名字,obj[v.mappedHeader] = ...
  • return obj as new object for new returning list/array