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”,
}
],
},
],
}
];

这太完美了。很高兴听到!:)