Я борюсь с чем-то, что кажется тривиальным.У меня есть массив объектов:
const vehicles = [
{
"sku": "1234",
"year": "2004",
"make": "Chevrolet",
"model": "Avalanche",
},
{
"sku": "1234",
"year": "2006",
"make": "Chevrolet",
"model": "Avalanche",
},
{
"sku": "1234",
"year": "2009",
"make": "Chevrolet",
"model": "Silverado 1500",
},
{
"sku": "1234",
"year": "2006",
"make": "Chevrolet",
"model": "Silverado 1500",
}]
Я бы хотел сопоставить sku
, make
и model
и выровнять объекты, чтобы получить конечное состояние:
const mutatedVehicles = [
{
"sku": "1234",
"years": ["2004", "2006"],
"make": "Chevrolet",
"model": "Avalanche",
},
{
"sku": "1234",
"years": ["2009", "2006"],
"make": "Chevrolet",
"model": "Silverado 1500"
}]
Я фактически работал с этим в Python, первоначально используя словари, но в конечном итоге предпочел некоторые из методов, доступных в JS.Я пытался использовать Array.forEach, Object.assign и несколько других методов, но у меня не получилось.
EDIT : меня попросили поделиться некоторыми кодами, которые я пробовал- это Python, а не JS, потому что именно там я и начал.
def match_props(f, x):
if f['sku'] == x['sku'] and f['year'] != x['year'] and f['make'] == x['make'] and f['model'] == x['model']:
return True
else:
return False
fitments = [
{
"sku": "1234",
"year": "2004",
"make": "Chevrolet",
"model": "Avalanche",
"drive": "",
},
{
"sku": "1234",
"year": "2009",
"make": "Chevrolet",
"model": "Silverado 1500",
"drive": "",
},
{
"sku": "1234",
"year": "2006",
"make": "Chevrolet",
"model": "Silverado 1500",
"drive": "",
},
]
merged = []
for f1 in fitments:
pMerge = {}
for f2 in fitments:
if match_props(f1, f2):
pMerge = {
"sku": f1['sku'],
"make": f1['make'],
"model": f1['model'],
"drive": f1['drive'],
"years": [y for y in [f1['year'], f2['year']]]
}
else:
pMerge = f2
if pMerge not in merged:
merged.append(pMerge)
print(merged)