我有一个数组,我试图将两个值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))
)
)
答案 0 :(得分:1)
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'
}
]
}
]
答案 1 :(得分:0)
您可以将已经完成的工作分配给item.units
。但是您必须记住在乘法之前将值转换为整数。如果需要将结果作为字符串,还必须将结果转换回字符串。如果所有值都是数字,您将执行以下操作:
sites.forEach(
(innerArray) => innerArray.values.forEach(item => {
item.units = item.variationName.qty * item.units;
})
)
可能值得注意的是,您所称的innerArray
并不是一个数组,而是一个对象,因此为了清楚起见,您可能希望对其更好地命名。
答案 2 :(得分:0)
这是您可以做的:
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
。