我在通过 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() 在 array2
的 ids
和 names
之间。然后你可以使用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/