Smi*_*tty 1 javascript arrays object
我正在努力寻找看起来应该是微不足道的事情.我有一个对象数组:
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",
}]
Run Code Online (Sandbox Code Playgroud)
我想匹配sku,make以及model和扁平的对象有一个最终状态:
const mutatedVehicles = [
{
"sku": "1234",
"years": ["2004", "2006"],
"make": "Chevrolet",
"model": "Avalanche",
},
{
"sku": "1234",
"years": ["2009", "2006"],
"make": "Chevrolet",
"model": "Silverado 1500"
}]
Run Code Online (Sandbox Code Playgroud)
我最初使用字典在Python中使用过这个,但最终更喜欢JS中的一些方法.我已经尝试过使用Array.forEach,Object.assign和其他一些方法,而且还很简单.
编辑:我被要求分享我尝试过的一些代码 - 它是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)
Run Code Online (Sandbox Code Playgroud)
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"}];
let result = Object.values(vehicles.reduce((a,{sku, year, make, model}) => {
let id = sku + "_" + make + "_" + model;
if(a[id]) a[id].years.push(year)
else a[id] = {sku, make, model, years : [year]}
return a;
},{}));
console.log(result);Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
55 次 |
| 最近记录: |