Вы можете использовать Map collection, чтобы иметь O(1)
при отображении второго массива:
const uniquePencils = new Map(arr2.map(s => [s.value, s.price]));
const result = arr1.map(a => ({...a, price: uniquePencils.get(a.item)}));
Как mdn говорит о коллекции Map :
Объект Map содержит пары ключ-значение и запоминает исходный порядок вставки ключей.
Таким образом, чтобы создать коллекцию карт из массива, мы можем использовать метод map :
const uniquePencils = new Map(arr2.map(s => [s.value, s.price]));
Затем, когда мы отображаем массив, нам нужно присвоить имя элемента (например, Карандаш) для коллекции Map для get
объекта из коллекции карт.
arr1.map(a => ({...a, price: uniquePencils.get(a.item)}));
In Кроме того, мы использовали оператор ...
. Это называется распространенным синтаксисом. Копирует собственные перечисляемые свойства из предоставленного объекта в новый объект.
Пример:
let arr1 = [{
"_id": 1,
"item": "Pencil",
"color": "Red"
},{
"_id":2,
"item": "Pen",
"color": "Yellow"
},{
"_id": 3,
"item": "Pencil",
"color": "Green"
}];
let arr2 = [{
"value":"Pencil",
"price":1000,
},{
"value":"Pen",
"price":1500,
}];
const uniquePencils = new Map(arr2.map(s => [s.value, s.price]));
const result = arr1.map(a => ({...a, price: uniquePencils.get(a.item)}));
console.log(result);