在Javascript中连接两个数组

时间:2018-03-31 13:01:45

标签: javascript arrays

我需要加入两个数组,从服务器我得到下一个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;
                })

但结果是:

enter image description here

2 个答案:

答案 0 :(得分:1)

您可以使用reducemapconcat

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);