Всім привіт мені треба обеднати два масива с унікальними значенями в мене вийшло але то гавно код я думаю можна зробити простіше
const arrOne = [
{city: 'lviv', price: 1},
{city: 'drogobuch', price: 2},
]
const arrTwo = [
{city: 'lviv', price: 0},
{city: 'styu', price: 0},
{city: 'odessa', price: 0},
]
const res = arrOne.reduce((acc, cur, idx, def) => {
const findCity = arrTwo.filter(el => !def.find(it => it.city === el.city) )
console.log('findCity', findCity)
if(findCity && findCity.length > 0){
return [...acc, ...findCity, cur]
}
return [...acc, cur]
}, [])
console.log('res', [...new Set(res)] )
dmitry
16.Ноябрь.2022 20:39:25
2
Як оброблювати обʼєкти з однаковими городами та різними price
?
Таку задачу можно розбити на 2 етапи:
Обʼеднаті масиви
Відфільтрувати зайве
const arrOne = [
{city: 'lviv', price: 1},
{city: 'drogobuch', price: 2},
]
const arrTwo = [
{city: 'lviv', price: 0},
{city: 'styu', price: 0},
{city: 'odessa', price: 0},
]
const everything = [...arrOne, ...arrTwo]
const unique = everything.filter((outer, iteratedIndex) => {
const foundIndex = everything.findIndex((inner) => {
return inner.city === outer.city
})
// Індекси будуть однакові на першій ітераціі по everything, ра різні для схожих обʼектів на наступних
// Отже в результат ввійде перший "схожий" обʼект
return foundIndex === iteratedIndex
})
console.log(unique)
спс
я ще вотак написав
let stopArray = false
const res2 = arrOne.reduce((acc, cur, idx, def) => {
const findCity = arrTwo.filter(el => !def.find(it => it.city === el.city))
if(findCity && findCity.length > 0 && !stopArray){
stopArray = true
return [...acc, ...findCity, cur]
}
return [...acc, cur]
}, [])
console.log('2', res2)
dmitry
16.Ноябрь.2022 21:20:28
4
Є в мене відчуття що з іншими початковими масивами це алгоритм не спрацює. Але я не зміг знайти прикладу щоб це підвердити, моє відчуття може не підтвердитися. Дуже схоже що рішення працює але воно занадто заплутано: не розміщуеться в голові (а я програмую майже кожний день вже багато років).
Те що ти убрав Set
це вірно: він був зайвий ні на що не впливав.