些細なことのように思える何かに苦労しています。私はオブジェクトの配列を持っています:
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、およびその他のいくつかのメソッドを使用してみましたが、不足しています。
編集:私が試したコードのいくつかを共有するように頼まれました-それは私が最初に始めた場所であるため、JSではなくPythonです。
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)
Array.reduceとObject.valuesを使用します
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);
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加