Javascript JS-重新映射数组并将父元素添加到子数组
我试图找出如何重新映射下面的数组,将Javascript JS-重新映射数组并将父元素添加到子数组,javascript,arrays,Javascript,Arrays,我试图找出如何重新映射下面的数组,将变量选项分组到变量名称下(删除任何重复项),并将父级的供应商uLID作为新元素添加到变量选项 我已经包括了我希望得到的输入和输出 到目前为止,我编写的脚本按名称对变体进行分组,但是我似乎无法将供应商_uLID添加到变体选项中 如何将供应商\u uLID每个变量选项添加到输入阵列中变量选项的父级 JS代码: company.productVariations.forEach(variation => { const variationIndex =
变量选项
分组到变量名称
下(删除任何重复项),并将父级的供应商uLID
作为新元素添加到变量选项
我已经包括了我希望得到的输入和输出
到目前为止,我编写的脚本按名称对变体进行分组,但是我似乎无法将供应商_uLID
添加到变体选项中
如何将供应商\u uLID
每个变量选项
添加到输入阵列中变量选项
的父级
JS代码:
company.productVariations.forEach(variation => {
const variationIndex = currentOutput.findIndex(
outputVariation =>
variation.variationName === outputVariation.variationName
)
currentOutput.forEach(option => {
option.variationOptions.forEach(op => {
op['linkedVendors'] = []
op.linkedVendors.push(company.vendor_uLID)
})
})
if (variationIndex === -1) {
currentOutput.push({
variationName: variation.variationName,
variationOptions: variation.variationOptions,
record_uLID: variation.record_uLID,
})
} else {
variation.variationOptions.forEach(variationOption => {
if (
!currentOutput[variationIndex].variationOptions.some(
outputVariationOption =>
variationOption.record_uLID === outputVariationOption.record_uLID
)
) {
currentOutput[variationIndex].variationOptions.push(variationOption)
}
})
}
})
return currentOutput
}, [])
输入阵列
var arrayIn = [
{
vendor_uLID: '5e793a0411d2bef2e375cd00',
productVariations: [
{
variationName: 'Colour',
variationOptions: [
{
name: 'Blue',
record_uLID: '6afa239e-ce53-40eb-addc-836d8ecc0051',
},
{
name: 'green',
record_uLID: '66654830-6850-490a-8eaf-9d505e3e4672',
},
],
},
{
variationName: 'Pattern',
variationOptions: [
{
name: 'Bold',
record_uLID: '6afa239e-ce53-40eb-addc-836d8ecc0055',
},
{
name: 'Spotted',
record_uLID: '66654830-6850-490a-8eaf-9d505e3e4671',
}
],
},
],
},
{
vendor_uLID: '5e7bb266071f9601b6ad8f4e',
productVariations: [
{
variationName: 'Colour',
variationOptions: [
{
name: 'Blue',
record_uLID: '6afa239e-ce53-40eb-addc-836d8ecc0051',
},
{
name: 'purple',
record_uLID: '66654830-6850-490a-8eaf-9d505e3e4672',
},
],
},
{
variationName: 'Pattern',
variationOptions: [
{
name: 'Bold',
record_uLID: '6afa239e-ce53-40eb-addc-836d8ecc0055',
},
{
name: 'Spotted',
record_uLID: '66654830-6850-490a-8eaf-9d505e3e4671',
}
],
},
],
}
]
输出阵列
[
{
"variationName": "Colour",
"variationOptions": [
{
"name": "Blue",
"record_uLID": "6afa239e-ce53-40eb-addc-836d8ecc0051",
"linkedVendors": [
"5e793a0411d2bef2e375cd00",
"5e7bb266071f9601b6ad8f4e",
]
},
{
"name": "green",
"record_uLID": "66654830-6850-490a-8eaf-9d505e3e4672",
"linkedVendors": [
"5e793a0411d2bef2e375cd00",
]
},
{
"name": "purple",
"record_uLID": "66654830-6850-490a-8eaf-9d505e3e4675",
"linkedVendors": [
"5e7bb266071f9601b6ad8f4e",
]
}
]
},
{
"variationName": "Pattern",
"variationOptions": [
{
"name": "Bold",
"record_uLID": "6afa239e-ce53-40eb-addc-836d8ecc0055",
"linkedVendors": [
"5e7bb266071f9601b6ad8f4e",
"5e793a0411d2bef2e375cd00"
]
},
{
"name": "Spotted",
"record_uLID": "66654830-6850-490a-8eaf-9d505e3e4671",
"linkedVendors": [
"5e793a0411d2bef2e375cd00",
"5e7bb266071f9601b6ad8f4e"
]
}
]
}]
这里有一种方法,使用reduce创建嵌套对象(tempOutput
),然后使用object.values()
)将其转换为所需的对象数组样式:
const tempOutput=arrayIn.reduce((aggObj,供应商)=>{
vendor.productVariations.forEach(变量=>{
如果(!aggObj[vari.variationName]){
aggObj[vari.variationName]={variationName:vari.variationName,variationOptions:{};
}
vari.variationOptions.forEach(opt=>{
const currooptions=aggObj[vari.variationName]['variationOptions']
如果(!currOptions[opt.name]){
currOptions[opt.name]=opt;
opt.linkedVendors=[vendor.vendor_uLID];
}
否则{
currOptions[opt.name].linkedVendors.push(vendor.vendor\uLID);
}
})
})
返回aggObj;
}, {});
const finalOutput=Object.values(tempOutput.map)(变量=>{
vari.variationOptions=对象值(vari.variationOptions);
返回变量;
});
控制台日志(最终输出)代码>
。作为控制台包装{最大高度:100%!重要;顶部:0;}
常数arrayIn=[
{
供应商名称:“5E793A041D2BEF2E375CD00”,
产品变体:[
{
变量名称:“颜色”,
变量选项:[
{
名称:“蓝色”,
记录编号:“6afa239e-ce53-40eb-addc-836d8ecc0051”,
},
{
名称:'绿色',
记录“66654830-6850-490a-8eaf-9d505e3e4672”,
},
],
},
{
variationName:'模式',
变量选项:[
{
名称:“粗体”,
记录“6afa239e-ce53-40eb-addc-836d8ecc0055”,
},
{
名称:'斑点',
记录“66654830-6850-490a-8eaf-9d505e3e4671”,
}
],
},
],
},
{
供应商名称:“5E7BB26607F9601B6AD8F4E”,
产品变体:[
{
变量名称:“颜色”,
变量选项:[
{
名称:“蓝色”,
记录编号:“6afa239e-ce53-40eb-addc-836d8ecc0051”,
},
{
名称:“紫色”,
记录“66654830-6850-490a-8eaf-9d505e3e4672”,
},
],
},
{
variationName:'模式',
变量选项:[
{
名称:“粗体”,
记录“6afa239e-ce53-40eb-addc-836d8ecc0055”,
},
{
名称:'斑点',
记录“66654830-6850-490a-8eaf-9d505e3e4671”,
}
],
},
],
}
];
这太完美了。很高兴听到!:)