我需要加入两个数组,从服务器我得到下一个json。一个数组,表示“数据”有2个对象,另一个被称为“Doc”,由4个对象组成。
我想创建一个包含8个等于以下元素的矩阵(我手工完成):
[
{
"idlibrosiva": 1,
"iddoc": 1,
"false": 1
},{
"idlibrosiva": 1,
"iddoc": 2,
"false": 1
},{
"idlibrosiva": 1,
"iddoc": 3,
"false": 1
},{
"idlibrosiva": 1,
"iddoc": 4,
"false": 1
},{
"idlibrosiva": 2,
"iddoc": 1,
"false": 1
},{
"idlibrosiva": 2,
"iddoc": 2,
"false": 1
},{
"idlibrosiva": 2,
"iddoc": 3,
"false": 1
},{
"idlibrosiva": 1,
"iddoc": 4,
"false": 1
}]
这是我在json中从服务器获得的内容
{
"status": "success",
"code": 200,
"data": [
{
"idlibrosiva": 1,
"nombre": "Compras",
"descripcion": "Art.-141 C.T.",
"estado": 1
},
{
"idlibrosiva": 2,
"nombre": "Contribuyentes",
"descripcion": "Artículo 141. C.T.- ",
"estado": 1
},
],
"Doc": [
{
"**iddoc**": 1,
"documento": "CREDITO FISCAL",
"descripcion": "ART. 107 C.C.",
"estado": 1
},
{
"iddoc": 2,
"documento": "NOTA DE CREDITO",
"descripcion": "ART. 110 C.C- ",
"estado": 1
},
{
"iddoc": 3,
"documento": "FACTURA",
"descripcion": "ART. 107 C.C.",
"estado": 1
},
{
"iddoc": 4,
"documento": "NOTA DE DEBITO",
"descripcion": "ART. 110 C.C.-",
"estado": 1
},
],
"mensaje": "Todo se ha cargado correctamente"}
我试着这样做:
this.Info = response.data;
this.liva = response.data.filter((item) => item.estado == 1);
this.docs = response.Doc.filter((item) => item.estado == 1);
this.DocYlib = this.liva.map((item)=>{
const DocumentoUtilizado = new ModeloDocUtilizadosIVA();
DocumentoUtilizado.Libro = item.idlibrosiva;
DocumentoUtilizado.estado = false;
DocumentoUtilizado.documento = this.docs.map((item) => item.iddoc);
return DocumentoUtilizado;
})
但结果是:
答案 0 :(得分:1)
您可以使用reduce
,map
和concat
var output = obj.Doc.reduce( (acc, c) =>
acc.concat( obj.data.map( s =>
({ idlibrosiva : s.idlibrosiva, iddoc : c.iddoc, "false": 1 }) //return new object from map callback
) //concat statement ended
) , []) //initialize accumulator to []
<强>演示强>
var obj = {
"status": "success",
"code": 200,
"data": [{
"idlibrosiva": 1,
"nombre": "Compras",
"descripcion": "Art.-141 C.T.",
"estado": 1
},
{
"idlibrosiva": 2,
"nombre": "Contribuyentes",
"descripcion": "Artículo 141. C.T.- ",
"estado": 1
},
],
"Doc": [{
"iddoc": 1,
"documento": "CREDITO FISCAL",
"descripcion": "ART. 107 C.C.",
"estado": 1
},
{
"iddoc": 2,
"documento": "NOTA DE CREDITO",
"descripcion": "ART. 110 C.C- ",
"estado": 1
},
{
"iddoc": 3,
"documento": "FACTURA",
"descripcion": "ART. 107 C.C.",
"estado": 1
},
{
"iddoc": 4,
"documento": "NOTA DE DEBITO",
"descripcion": "ART. 110 C.C.-",
"estado": 1
},
],
"mensaje": "Todo se ha cargado correctamente"
};
var output = obj.Doc.reduce((acc, c) =>
acc.concat(obj.data.map(s =>
({
idlibrosiva: s.idlibrosiva,
iddoc: c.iddoc,
"false": 1
}) //return new object from map callback
) //concat statement ended
), []) //initialize accumulator to []
console.log(output);
答案 1 :(得分:0)
要求是将每个对象从“数据”映射到“Doc”中的每个对象。
让我们分别提取它们。
const { data, Doc:doc } = response;
// aliasing Doc as doc, just for variable declaration convention.
现在使用forEach迭代两者并在结果数组中推送所需的对象。
const result = [];
data.forEach(dataObj => {
const { idlibrosiva } = data;
doc.forEach(docObj => {
const { iddoc } = doc;
result.push({
idlibrosiva,
iddoc,
'false': 1
};
};
};
console.log('result --> ', result);