Вы можете построить карту (colorMap
), которая имеет ключ ref
из вашего colors
массива. Карта будет иметь следующую структуру:
{
"apple" => ["apple", "red"]
"banana" => ["banana", "yellow"]
}
Как вы можете видеть, каждый ключ на карте - это фрукт с соответствующим массивом в качестве значения. Когда у вас есть colorMap
, вы можете использовать метод .flatMap()
в своем массиве fruits
, который позволит вам преобразовать каждый элемент. Если фрукт существует в colorMap
, вы можете сопоставить фрукт с элементами, хранящимися в ключе плодов, если он не существует, вы можете взять значение по умолчанию для самого фрукта, используя || fruit
.
См. Пример ниже:
const fruits = ["apple","melon", "banana", "kiwi"]
const colors = [{ref: "apple", color: "red"}, {ref: "banana", color:"yellow"}];
const colorMap = new Map(colors.map(({ref, color}) => [ref, [ref, color]]));
const res = fruits.flatMap(fruit => colorMap.get(fruit) || fruit);
console.log(res);
Если вы не можете поддерживать .flatMap()
, вы можете рассмотреть возможность использования обычного .map()
, а затем сглаживание массива с использованием .concat()
с синтаксисом распространения :
const fruits = ["apple","melon", "banana", "kiwi"]
const colors = [{ref: "apple", color: "red"}, {ref: "banana", color:"yellow"}];
const colorMap = new Map(colors.map(({ref, color}) => [ref, [ref, color]]));
const res = [].concat(...fruits.map(fruit => colorMap.get(fruit) || fruit));
console.log(res);