繁体   English   中英

将嵌套数组中的2个值相乘,然后推送到新数组-JavaScript Vue

[英]Multiplying 2 values in nested array then push to a new array - JavaScript Vue

我有一个数组,我试图将两个值qtypackageQuantity ,创建一个新数组,并将结果设置为units键。

麻烦在于我有一个复杂的嵌套数组,无法锻炼如何创建新数组!

我已经弄清楚如何进行乘法运算,但是我不知道如何将值推入新数组。

我正在使用Vue,并且希望在可能的情况下实时更改值。

如何进行乘法运算,创建一个新数组,将结果放入单位键?

为了澄清,我想创建一个新数组,将新结果放入其中,同时也添加旧值。 见下文。

非常感谢!

这是我当前的数组:

data: () => ({
sites: [

  {
    sku: "10001",
    values: [
      {
        variationName: { name: "Unpackaged", qty: 1 },
        units: '',
        packageQuantity: '2'
      }
    ]
  },
  {
    sku: "10002",
    values: [
      {
        variationName: { name: "2 Pack", qty: 2 },
        units: '',
        packageQuantity: '3'
      },
      {
        variationName: { name: "4 Pack", qty: 4 },
        units: '',
        packageQuantity: '1'
      }
    ]
  }
    ]
})

这是我希望输出的内容:

sites: [

  {
    sku: "10001",
    values: [
      {
        variationName: { name: "Unpackaged", qty: 1 },
        units: '2', // 1 * 2
        packageQuantity: '2'
      }
    ]
  },
  {
    sku: "10002",
    values: [
      {
        variationName: { name: "2 Pack", qty: 2 },
        units: '6', // 2 * 3
        packageQuantity: '3'
      },
      {
        variationName: { name: "4 Pack", qty: 4 },
        units: '4', // 1 * 4
        packageQuantity: '1'
      }
    ]
  }
    ]

这是我的计算:

 sites.forEach(
  (innerArray) => innerArray.values.forEach(
   (item => console.log(item.variationName.qty * item.units))
  )
 )
           let newData=[]; 
            let sites = [

                {
                    sku: "10001",
                    values: [{
                        variationName: {
                            name: "Unpackaged",
                            qty: 1
                        },
                        units: '',
                        packageQuantity: '2'
                    }]
                },
                {
                    sku: "10002",
                    values: [{
                            variationName: {
                                name: "2 Pack",
                                qty: 2
                            },
                            units: '',
                            packageQuantity: '3'
                        },
                        {
                            variationName: {
                                name: "4 Pack",
                                qty: 4
                            },
                            units: '',
                            packageQuantity: '1'
                        }
                    ]
                }
            ]
            for (let i = 0; i < sites.length; i++) {
                let iData = sites[i].values;
                for (let j = 0; j < iData.length; j++) {
                    iData[j].units = parseInt(iData[j].packageQuantity) * parseInt(iData[j].variationName.qty);
                }

            }
             newData.push(sites);

产量

    newData: [
            {
                sku: "10001",
                values: [{
                    variationName: {
                        name: "Unpackaged",
                        qty: 1
                    },
                    units: 2, 
                    packageQuantity: '2'
                }]
            },
            {
                sku: "10002",
                values: [{
                        variationName: {
                            name: "2 Pack",
                            qty: 2
                        },
                        units: 6,
                        packageQuantity: '3'
                    },
                    {
                        variationName: {
                            name: "4 Pack",
                            qty: 4
                        },
                        units: 4, 
                        packageQuantity: '1'
                    }
                ]
            }
        ]

您可以将已经完成的工作分配给item.units 但是您必须记住在乘法之前将值转换为整数。 如果需要将结果作为字符串,还必须将结果转换回字符串。 如果所有值都是数字,请执行以下操作:

 sites.forEach(
    (innerArray) => innerArray.values.forEach(item => { 
       item.units = item.variationName.qty * item.units; 
    })
 )

可能值得注意的是,您所谓的innerArray并不是一个数组,而是一个对象,因此为了清楚起见,可能需要更好地命名它。

您可以执行以下操作:

const datum = {
  sites: [

    {
      sku: "10001",
      values: [
        {
          variationName: { name: "Unpackaged", qty: 1 },
          units: 5,
          packageQuantity: ""
        }
      ]
    },
    {
      sku: "10002",
      values: [
        {
          variationName: { name: "2 Pack", qty: 2 },
          units: 3,
        },
        {
          variationName: { name: "4 Pack", qty: 4 },
          units: 6,
          packageQuantity: ""
        }
      ]
    }
      ]
  };

const qtyCalculated = datum && datum.sites && datum.sites.reduce((acc, site) => {
  if (!acc["sku"]) {
    acc["sku"] = [];
  }
  acc["sku"].push(site.sku);
  if (!acc["qty"]) {
    acc["qty"] = [];
  }
  acc["qty"].push(...site.values && site.values.reduce((valueAcc, valueItem) => {
    valueAcc.push(valueItem.variationName.qty * parseInt(valueItem.units, 10));
    return valueAcc;
  }, []));
  return acc;
}, []);

console.log(qtyCalculated);

您也可以添加名称并为每个价值项分别计算数量。 我已经在基准面中将单位声明为数字。 如果您使用的是字符串,请如上所述使用parseInt

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM