Одним из возможных решений является создание Map между ids
и names
из array2
с использованием Array.reduce () .Затем вы можете использовать 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})
);