【问题标题】:How to insert an array inside another array?如何在另一个数组中插入一个数组?
【发布时间】:2021-11-23 22:53:57
【问题描述】:

我有一个名为“pedidos”的数组,其长度为 x,因为它取决于我们通过 firebase 自动更新的“订单”数量。

每个“订单”都有以下属性:

acudiente: ""
banco: "Global Bank"
data: (12) [{…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}]
email: ""
escuela: "Academia Internacional David"
estadoDeDisponibilidad: "Pendiente"
estadoDePago: "Pendiente"
fecha: "11/22/2021"
grado: "1° Grado"
id: "[AID]PM-345"
identificacion: ""
metodoDePago: "ACH"
nombre: "Brihana Orisiveth De Gracia Concepción "
phone: ""
total: "346.45"
totalPagado: 0
uid: "13eLyFqGGrZ0vTu3llpVxeFCBun2"

现在,每个订单都有一个名为“数据”的属性,它是 x,因为人们可以订购 x 数量的东西,所以 12 不是一个常数。 data 中的每一项都有以下属性:

descripcion: "ACCELIUM - Programa de Tecnología"
disponible: 0
editorial: "Programa"
grado: (6) ['1° Grado', '2° Grado', '3° Grado', '4° Grado', '5° Grado', '6° Grado']
id: "L-25304"
materia: "Tecnologia"
ordenados: 12
precio: "35.00"
tipo: "Programa"

现在我正在尝试创建一个包含每个数据数组的新数组,这意味着如果有 5 个订单,每个订单有 5 个项目,它应该是一个 25 个数组,这是一个非常简单的 for 循环:

for(let x = 0; x < pedidos.length; x++){
      for(let y = 0; y < pedidos[x].data.length; y++){
        pedidosExcel.push(pedidos[x].data[y])
      }
    }

但是我还想要主数组中的一些属性,而不仅仅是名为“数据”的数组中的属性,所以我想知道是否可以相互合并属性。

更新

所以我无法做我想做的事,但我设法通过以下代码接近它,但是如果我这样做,它最终会由于某种原因成为数组中的一个数组。我手动设置了每个属性,因为我想覆盖其中一些属性,因为某些属性具有相同的名称

for(let x = 0; x < pedidos.length; x++){
      for(let y = 0; y < pedidos[x].data.length; y++){
        pedidosExcel.push(pedidos[x].data[y])
        pedidosExcel[y] = [{
          id: pedidos[x].id,
          nombre: pedidos[x].nombre,
          escuela: pedidos[x].escuela,
          grado: pedidos[x].grado,
          fecha: pedidos[x].fecha,
          descripcion: pedidos[x].data[y].descripcion,
          tipo: pedidos[x].data[y].tipo,
          editorial: pedidos[x].data[y].editorial,
          precio: pedidos[x].data[y].precio,
        }]
      }
    }

希望这比我之前的解释更清楚。

【问题讨论】:

  • 合并选项?可悲的是没有用
  • 在您帖子的最后一张图片中,有两个名称为 id 的键 - 这是不可能的,键必须是唯一的。另外,在上面的示例中,data 数组包含 12 个项目,那么您希望将哪个项目合并到父数据中?
  • 不要发布图片,发布包含相关信息的文字。由于可以复制和粘贴,而且阅读起来更清晰,因此回答起来更加容易。
  • @RoMilton 我确信它们可以被覆盖,这是我想要实现的。好的,所以主数组包含一个名为 data[x] 的数组,其中包含 x 个项目(在该图片中是 12,但并不总是相同)。我创建了一个新变量,它将保存所有称为数据的属性,所以如果在我的数组集合中我有 35 个保存数据 [x] 的数组,那么新数组应该是这些数据 [x] 保存的所有信息的集合,所以它将是 35 * 数据 [x]。但是我仍然需要来自第一个数组的信息,这就是为什么我试图在我的新更新中覆盖它。

标签: javascript arrays reactjs


【解决方案1】:

问题是您正在生成一个嵌套数组,但您希望它是扁平的。您有两种选择:

选项 1:使用.flatMap()

这个函数只是.map().flat()的组合

const pedidos = [{
  id: '[AID]PM-345',
  nombre: '999999990',
  escuela: 'ABCDEF',
  grado: '1° grado ',
  fecha: '11/22/2021',
  data: [
    {
      descripcion: 'ACCELIUM - Programa',
      tipo: 'Programa',
      editorial: 'Programa',
      precio: '35.00'
    },
    {
      descripcion: 'ACCELIUM - Programa 2',
      tipo: 'Programa 2',
      editorial: 'Programa 2',
      precio: '45.00'
    }
  ]
}];

const pedidosExcel = pedidos.flatMap(pedido =>
  pedido.data.map(item => ({
    id: pedido.id,
    nombre: pedido.nombre,
    escuela: pedido.escuela,
    grado: pedido.grado,
    fecha: pedido.fecha,
    descripcion: item.descripcion,
    tipo: item.tipo,
    editorial: item.editorial,
    precio: item.precio
  }))
);

console.log(pedidosExcel);

选项 2 使用 .reduce()

这个函数的优点是比.flatMap()使用得更广泛,所以可能更容易理解。也许吧。

Reduce 遍历一个数组,并将一个值从一次迭代传递到下一次迭代(在我的示例中为acc)。

const pedidos = [{
  id: '[AID]PM-345',
  nombre: '999999990',
  escuela: 'ABCDEF',
  grado: '1° grado ',
  fecha: '11/22/2021',
  data: [
    {
      descripcion: 'ACCELIUM - Programa',
      tipo: 'Programa',
      editorial: 'Programa',
      precio: '35.00'
    },
    {
      descripcion: 'ACCELIUM - Programa 2',
      tipo: 'Programa 2',
      editorial: 'Programa 2',
      precio: '45.00'
    }
  ]
}];

const pedidosExcel = pedidos.reduce((acc, pedido) =>
  [
    ...acc,
    ...pedido.data.map(item => ({
      id: pedido.id,
      nombre: pedido.nombre,
      escuela: pedido.escuela,
      grado: pedido.grado,
      fecha: pedido.fecha,
      descripcion: item.descripcion,
      tipo: item.tipo,
      editorial: item.editorial,
      precio: item.precio
    }))
  ],
[]); 

console.log(pedidosExcel)

使用您认为对您的团队最容易和最容易理解的任何一种。

感谢您为您的问题添加代码 - 下次请将预期结果和数据也添加为代码。

【讨论】:

  • 是的,这有效!非常感谢你。我添加了代码,但控制台日志我截取了它们我不知道人们实际上复制并粘贴了这些。
【解决方案2】:

据我所知,你有一个数组,里面有一个对象(不是数组),在这个对象里面你有很多不同的键,其中一个键是 data,它是一个数组对象。那么你想得到什么数据模型呢?用小例子来描述。

【讨论】:

  • 好吧,我想将数据放在不同的数组中(这是我在 for 循环中所做的),我还想使用 "id" 、 "nombre"、"colegio"、" fecha" 来自第一个大数组,为此我需要在 for 循环中以某种方式合并它们
  • 您的问题有点难以理解,尤其是屏幕截图。编写了一些代码(不是屏幕截图)来显示您想要的数据模型。 1. 您拥有的简单数据模型 2. 您想要拥有的简单数据模型
  • 代码在那里,截图只是为了显示我正在移动的数据。 for 循环将名为 data 的数组推送到一个新的变量 call pedidosExcel 中,从名为 data 的数组中抓取每个数组的每个值到新变量中。
  • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
猜你喜欢
  • 2014-05-01
  • 1970-01-01
  • 2020-11-22
  • 2015-09-19
  • 1970-01-01
  • 2012-03-21
  • 2011-08-09
  • 2019-04-14
  • 2022-01-03
相关资源
最近更新 更多