【问题标题】:Iterate through 2 arrays containing objects and return the values of a second array using the first arrays keys遍历 2 个包含对象的数组并使用第一个数组键返回第二个数组的值
【发布时间】:2019-09-06 00:44:50
【问题描述】:

我正在尝试用户 .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(),但我似乎没有正确实施它

请帮忙

【问题讨论】:

  • 把你试过的代码也贴出来

标签: javascript arrays foreach array.prototype.map


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-04
    • 2020-07-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多