這就是問題所在:我正在嘗試扁平化一個銷售陣列,其中每個元素都有一個 ID、一個銷售代碼、一個關聯的賣家用戶名、一個時間戳和一個詳細資訊。詳細資訊由一個包含產品、金額和每個專案中每個專案的小計的陣列組成。例如,完整的 sales 陣列如下所示:
[
{
"_id":"63182596a51be828aa351daf",
"codVenta":1,
"vendedor":"rosittog",
"detalle":
[
{
"producto":"3",
"cantidad":1,
"tipoPago":"efectivo",
"subtotal":23,
"_id":"63182596a51be828aa351db0"
},
{
"producto":"4",
"cantidad":1,
"tipoPago":"efectivo",
"subtotal":55,
"_id":"63182596a51be828aa351db1"
}
],
"fechaHora":"2022-09-07T05:01:10.462Z",
"__v":0
},
{
"_id":"631845c706b2c211ed6f5ca9",
"codVenta":1,
"vendedor":"rosittog",
"detalle":
[
{
"producto":"4",
"cantidad":1,
"tipoPago":"efectivo",
"subtotal":55,
"_id":"631845c706b2c211ed6f5caa"
}
],
"fechaHora":"2022-09-07T07:18:30.829Z",
"__v":0
}
]
我想要做的是展平陣列,所以我可以有這樣的事情:
[
{
"_id":"63182596a51be828aa351db0",
"idVentaAsociada":"63182596a51be828aa351daf",
"codVenta":1,
"vendedor":"rosittog",
"producto":"3",
"cantidad":1,
"tipoPago":"efectivo",
"subtotal":23,
"fechaHora":"2022-09-07T05:01:10.462Z"
},
{
"_id":"63182596a51be828aa351db1",
"idVentaAsociada":"63182596a51be828aa351daf",
"codVenta":1,
"vendedor":"rosittog",
"producto":"4",
"cantidad":1,
"tipoPago":"efectivo",
"subtotal":55,
"fechaHora":"2022-09-07T05:01:10.462Z"
},
{
"_id":"631845c706b2c211ed6f5caa",
"idVentaAsociada":"631845c706b2c211ed6f5ca9",
"codVenta":1,
"vendedor":"rosittog",
"producto":"4",
"cantidad":1,
"tipoPago":"efectivo",
"subtotal":55,
"fechaHora":"2022-09-07T05:01:10.462Z"
}
]
這是:我需要一個扁平陣列的元素來處理每次銷售的每個細節。例如,在原始陣列中,我們在細節上有兩個專案(西班牙語中的“detelle”),另一個只有一個專案。那么,展平的陣列應該總共有三個專案。
為此,我正在嘗試做的是:
const aplanarVentas=function (ventas) {
let arrayVentasPlano=[];
//ventas.map(function (venta){
for (const venta of ventas) {
let ventaPlana= {
_id:'',
idVentaAsociada:'',
codVenta:0,
vendedor:'',
producto:0,
cantidad:0,
tipoPago:'',
subtotal:0
};
ventaPlana.idVentaAsociada=venta._id;
ventaPlana.codVenta=venta.codVenta;
ventaPlana.vendedor=venta.vendedor;
ventaPlana.fechaHora=venta.fechaHora;
//venta.detalle.map(function (elemDetalle){
for (const elemDetalle of venta.detalle) {
console.log("Entro al for");
//console.log(elemDetalle);
ventaPlana._id=elemDetalle._id;
ventaPlana.producto=elemDetalle.producto;
ventaPlana.cantidad=elemDetalle.cantidad;
ventaPlana.tipoPago=elemDetalle.tipoPago;
ventaPlana.subtotal=elemDetalle.subtotal
console.log("Before updating arrayVentasPlano");
console.log(arrayVentasPlano);
/*Validation tried
if (!arrayVentasPlano.some(
function (venta) {
return venta._id==elemDetalle._id
}
)
)
{
*/
arrayVentasPlano=arrayVentasPlano.concat(ventaPlana);
//arrayVentasPlano.push(ventaPlana);
console.log("After updating arrayVentasPlano");
console.log(arrayVentasPlano);
//}
}
//})
//console.log(arrayVentasPlano);
return arrayVentasPlano;
}
//})
}
我留下了一些我之前嘗試過的行作為評論:使用 map 而不是 for,使用 push 而不是 concat,以及用于驗證的“some”函式,但這些東西都不起作用。
我的回應是這個(特別注意 _id 欄位):
[
{
"_id":"63182596a51be828aa351db1",
"idVentaAsociada":"63182596a51be828aa351daf",
"codVenta":1,
"vendedor":"rosittog",
"producto":"4",
"cantidad":1,
"tipoPago":"efectivo",
"subtotal":55,
"fechaHora":"2022-09-07T05:01:10.462Z"
},
{
"_id":"63182596a51be828aa351db1",
"idVentaAsociada":"63182596a51be828aa351daf",
"codVenta":1,"vendedor":"rosittog",
"producto":"4",
"cantidad":1,
"tipoPago":"efectivo",
"subtotal":55,
"fechaHora":"2022-09-07T05:01:10.462Z"
}
]
只是一個由兩個元素組成的陣列,與重復的詳細資訊對應的欄位
我在控制臺中的輸出是這個:
Entro al for
Before updating arrayVentasPlano
[]
After updating arrayVentasPlano
[
{
_id: new ObjectId("63182596a51be828aa351db0"),
idVentaAsociada: new ObjectId("63182596a51be828aa351daf"),
codVenta: 1,
vendedor: 'rosittog',
producto: '3',
cantidad: 1,
tipoPago: 'efectivo',
subtotal: 23,
fechaHora: 2022-09-07T05:01:10.462Z
}
]
Entro al for
Before updating arrayVentasPlano
[
{
_id: new ObjectId("63182596a51be828aa351db1"),
idVentaAsociada: new ObjectId("63182596a51be828aa351daf"),
codVenta: 1,
vendedor: 'rosittog',
producto: '4',
cantidad: 1,
tipoPago: 'efectivo',
subtotal: 55,
fechaHora: 2022-09-07T05:01:10.462Z
}
]
After updating arrayVentasPlano
[
{
_id: new ObjectId("63182596a51be828aa351db1"),
idVentaAsociada: new ObjectId("63182596a51be828aa351daf"),
codVenta: 1,
vendedor: 'rosittog',
producto: '4',
cantidad: 1,
tipoPago: 'efectivo',
subtotal: 55,
fechaHora: 2022-09-07T05:01:10.462Z
},
{
_id: new ObjectId("63182596a51be828aa351db1"),
idVentaAsociada: new ObjectId("63182596a51be828aa351daf"),
codVenta: 1,
vendedor: 'rosittog',
producto: '4',
cantidad: 1,
tipoPago: 'efectivo',
subtotal: 55,
fechaHora: 2022-09-07T05:01:10.462Z
}
]
如您所見:在第一次迭代中,它正確地將專案附加到 arrayPlanoVentas(“plano”表示平面,“ventas”表示銷售),但在下一次迭代中,我沒有先前附加的元素。
我做錯了什么?我幾乎什么都試過了。
如果需要,這是我呼叫 aplanarVentas 的函式(我使用的是 express 和 mongoose):
router.route('/asociarAplanar').get( async(req, res) => {
try {
const ventas=await Venta.find();
//Por cada venta, necesito N elementos
const ventasAplanadas= await aplanarVentas(ventas);
const usuarios= await Usuario.find({categoria: "vendedor"});
const productos= await Producto.find();
const cuentas= await Cuentas.findById("unico");
return res.json({
"ventas":ventasAplanadas,
"usuarios":usuarios,
"productos":productos,
"cuentas":cuentas
});
}
catch(err) {
console.log(err);
return res.status(400).json('Error: ' err);
}
})
uj5u.com熱心網友回復:
進行以下兩項更改以修復您的代碼:
Array#concat
的副本而ventaPlana
不是ventaPlana
通過更改:arrayVentasPlano=arrayVentasPlano.concat(ventaPlana);
至:
arrayVentasPlano=arrayVentasPlano.concat({...ventaPlana});
- 移動
return arrayVentasPlano;
使其位于外for
回圈之外
演示
顯示代碼片段
const v = [
{
"_id":"63182596a51be828aa351daf",
"codVenta":1,
"vendedor":"rosittog",
"detalle":
[
{
"producto":"3",
"cantidad":1,
"tipoPago":"efectivo",
"subtotal":23,
"_id":"63182596a51be828aa351db0"
},
{
"producto":"4",
"cantidad":1,
"tipoPago":"efectivo",
"subtotal":55,
"_id":"63182596a51be828aa351db1"
}
],
"fechaHora":"2022-09-07T05:01:10.462Z",
"__v":0
},
{
"_id":"631845c706b2c211ed6f5ca9",
"codVenta":1,
"vendedor":"rosittog",
"detalle":
[
{
"producto":"4",
"cantidad":1,
"tipoPago":"efectivo",
"subtotal":55,
"_id":"631845c706b2c211ed6f5caa"
}
],
"fechaHora":"2022-09-07T07:18:30.829Z",
"__v":0
}
];
const aplanarVentas=function (ventas) {
let arrayVentasPlano=[];
for (const venta of ventas) {
let ventaPlana= {
_id:'',
idVentaAsociada:'',
codVenta:0,
vendedor:'',
producto:0,
cantidad:0,
tipoPago:'',
subtotal:0
};
ventaPlana.idVentaAsociada=venta._id;
ventaPlana.codVenta=venta.codVenta;
ventaPlana.vendedor=venta.vendedor;
ventaPlana.fechaHora=venta.fechaHora;
for (const elemDetalle of venta.detalle) {
ventaPlana._id=elemDetalle._id;
ventaPlana.producto=elemDetalle.producto;
ventaPlana.cantidad=elemDetalle.cantidad;
ventaPlana.tipoPago=elemDetalle.tipoPago;
ventaPlana.subtotal=elemDetalle.subtotal
arrayVentasPlano=arrayVentasPlano.concat({...ventaPlana});
}
}
return arrayVentasPlano;
}
console.log( aplanarVentas( v ) );
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/506438.html
標籤:javascript 数组 表示 猫鼬 展平
上一篇:Mongoose通過陣列洗掉檔案