Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将嵌套数组中的2个值相乘,然后推送到一个新数组-JavaScript Vue_Javascript_Arrays_Node.js_Vue.js_Vuejs2 - Fatal编程技术网

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

将嵌套数组中的2个值相乘,然后推送到一个新数组-JavaScript Vue,javascript,arrays,node.js,vue.js,vuejs2,Javascript,Arrays,Node.js,Vue.js,Vuejs2,我有一个数组,我试图将两个值相乘qty和packageQuantity,创建一个新数组,结果设置为units键 问题是我有一个复杂的嵌套数组,无法解决如何创建新数组 我已经知道了如何进行乘法,但是我不知道如何将值推送到一个新数组 我正在使用Vue,如果可能的话,希望实时更改这些值 如何进行乘法,创建一个新数组,将结果放入单位键? 为了澄清,我想创建一个新数组,将新结果放入,同时也将旧值添加进去。见下文 非常感谢 这是我当前的阵列: data: () => ({ sites: [ {

我有一个数组,我试图将两个值相乘
qty
packageQuantity
,创建一个新数组,结果设置为
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))
  )
 )

您可以将已经完成的任务分配给
项.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

单位
应该是整数吗?在您的示例中,它们似乎都是空字符串。还有,结果应该是吗?抱歉,是的!我已经更新了示例。单位值仍然是empyt字符串?谢谢!如何实现推送。如果我执行
this.testArray.push({packageQty:item.variationName.qty*item.units})代替
item.units=item.variationName.qty*item.units我得到一个包含许多值的循环!干杯@tbowden您是否尝试获取这些值的乘积,将其放入一个包含一个对象的数组中,然后将
单位设置为数组?或者,在这个
forEach
之外是否还有另一个数组,您正试图用对象构建它?不完全是这样。我想创建一个名为testArray的新数组,并基本上重新创建它,将产品添加到名为packageQuantity的密钥中。谢谢@鲍登:好的。我想我现在明白你想要什么了。为此,我建议使用
Array.reduce
。不幸的是,由于时间关系,我现在无法向您展示我的解决方案,但如果其他人在我回来之前没有给出新的答案,我会很乐意给出新的答案。
           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'
                    }
                ]
            }
        ]