javascript - 将数组中的 id 替换为第二个数组中的名称

标签 javascript arrays angular object ecmascript-6

我在通过 id 连接两个数组与对象并用第二个数组中的 NAME 替换该 id 时遇到一些问题。例如我有数组:

array1 = [
  {id: [1, 2], info: "xxx"},
  {id: [2, 3], info: "yyy"}
]

array2 = [
  {nameId: 1, name: "Miami"},
  {nameId: 2, name: "Wacanda"},
  {nameId: 3, name: "London"},
]

我想修改array1或创建新的array3(使用ES6):

array1 = [
  {id: ["Miami", "Wacanda"], info: "xxx"},
  {id: ["Wacanda", "London"], info: "yyy"}
]

array3 = [
  {name: ["Miami", "Wacanda"], info: "xxx"},
  {name: ["Wacanda", "London"], info: "yyy"}
]

快速编辑链接: https://stackblitz.com/edit/angular-lrnfrd?file=src%2Fapp%2Ftesting%2Ftesting.component.ts

最佳答案

一种可能的解决方案是首先生成 Map使用 Array.reduce()array2idsnames 之间。然后你可以使用Array.map()通过 array1 来获取所需的数据。请注意,在下一个示例中,我选择了您的第二个输出示例。

const array1 = [
  {id: [1, 2], info: "xxx"},
  {id: [2, 3], info: "yyy"}
];

const array2 = [
  {nameId: 1, name: "Miami"},
  {nameId: 2, name: "Wacanda"},
  {nameId: 3, name: "London"},
];

let nameFromId = array2.reduce(
    (acc, {nameId, name}) => (acc.set(nameId, name), acc),
    new Map()
);

let res = array1.map(({id, info}) => ({name: id.map(i => nameFromId.get(i)), info}));

console.log(res);
.as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}

不生成 Map 的另一种替代方法是使用 Array.find()map() 函数内部:

let res = array1.map(
  ({id, info}) => ({name: id.map(i => array2.find(o => o.nameId === i).name), info})
);

关于javascript - 将数组中的 id 替换为第二个数组中的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56308925/

相关文章:

javascript - 通过循环读取和插入数据到数组

javascript - 仅当文本长度等于字母数时,如何在剪切文本时添加...?

Angular 解决错误错误 : Uncaught (in promise): TypeError: resolver is not a function

javascript - HTML+javascript还是javascript+jsp?

php - 从不同服务器访问数据库

javascript - 使用下划线检查对象数组是否具有键值

javascript - 如何在特定用户id下存储数据? Angular 火力基地

javascript - Webpack 开发中间件未正确提供 bundle.js

JavaScript 从数组中存储 Id

c++ - 是否可以将 bitset<8> 的值复制到一串数组而不进行转换?