javascript - 如何将新元素推送到数组中的所有对象?

标签 javascript

大家好,我正在尝试将新元素推送到数组中的所有对象,但似乎没有更新。

知道我在这里做错了什么吗?

这是我的对象,其中包含 instalments 数组。

{ _id: 5cf7d4fcc9c5846a69b48d41,
  offer: 5cf7d4fcc9c5846a69b48d40,
  instalments:
   [ { paid: false,
       _id: 5cf7d4fcc9c5846a69b48d44,
       description: 'Some deacription about yhis instalment',
       instalmentAmount: 100000,
       dueTo: 2019-06-06T23:00:00.000Z },
     { paid: false,
       _id: 5cf7d4fcc9c5846a69b48d43,
       description: 'Some deacription about yhis instalment',
       instalmentAmount: 100000,
       dueTo: 2019-06-13T23:00:00.000Z },
     { paid: false,
       _id: 5cf7d4fcc9c5846a69b48d42,
       description: 'Some deacription about yhis instalment',
       instalmentAmount: 91152,
       dueTo: 2019-06-20T23:00:00.000Z } ],
  user: 5cf53a1a8481923f72939940,
  createdAt: 2019-06-05T14:43:08.706Z,
  updatedAt: 2019-06-05T14:43:08.706Z,
  __v: 0 }

我想要做的是将offer添加到所有instalments对象

我尝试执行此操作的方式如下。

instalmentsGroup 是上面的对象,然后我访问 instalments 和 map

const instalments = await instalmentsGroup.instalments.map(
  instalment =>
    Object.assign({}, instalment, { offer: instalmentsGroup.offer })
);

最佳答案

您的问题出在 await 上。不需要 await,因为 .map 不会返回 Promise ,因此它不是异步的。

如果您想就地编辑对象,可以使用 .forEach ,它将循环遍历 instalments 数组中的每个对象并添加 order 属性。

参见下面的示例:

const obj = {
  _id: "5cf7d4fcc9c5846a69b48d41",
  offer: "5cf7d4fcc9c5846a69b48d40",
  instalments: [{
      paid: false,
      _id: "5cf7d4fcc9c5846a69b48d44",
      description: 'Some deacription about yhis instalment',
      instalmentAmount: 100000,
      dueTo: "2019 - 06 - 06 T23: 00: 00.000 Z"
    },
    {
      paid: false,
      _id: "5cf7d4fcc9c5846a69b48d43",
      description: 'Some deacription about yhis instalment',
      instalmentAmount: 100000,
      dueTo: "2019 - 06 - 13 T23: 00: 00.000 Z"
    },
    {
      paid: false,
      _id: "5cf7d4fcc9c5846a69b48d42",
      description: 'Some deacription about yhis instalment',
      instalmentAmount: 91152,
      dueTo: "2019 - 06 - 20 T23: 00: 00.000 Z"
    }
  ],
  user: "5cf53a1a8481923f72939940",
  createdAt: "2019 - 06 - 05 T14: 43: 08.706 Z",
  updatedAt: "2019 - 06 - 05 T14: 43: 08.706 Z",
  __v: 0
}

const offer = obj.offer;
obj.instalments.forEach(instalment => {
  instalment.offer = offer;
});

console.log(obj.instalments);

<小时/>

或者,您可以使用 .map()就像您必须将每个对象映射到其自身一样,并使用可以从原始对象获取的附加 offer 属性。只需确保删除 await 即可。这种方法将创建一个新的更改数组(并且不会修改原始对象)

参见下面的示例:

const obj = {
  _id: "5cf7d4fcc9c5846a69b48d41",
  offer: "5cf7d4fcc9c5846a69b48d40",
  instalments: [{
      paid: false,
      _id: "5cf7d4fcc9c5846a69b48d44",
      description: 'Some deacription about yhis instalment',
      instalmentAmount: 100000,
      dueTo: "2019 - 06 - 06 T23: 00: 00.000 Z"
    },
    {
      paid: false,
      _id: "5cf7d4fcc9c5846a69b48d43",
      description: 'Some deacription about yhis instalment',
      instalmentAmount: 100000,
      dueTo: "2019 - 06 - 13 T23: 00: 00.000 Z"
    },
    {
      paid: false,
      _id: "5cf7d4fcc9c5846a69b48d42",
      description: 'Some deacription about yhis instalment',
      instalmentAmount: 91152,
      dueTo: "2019 - 06 - 20 T23: 00: 00.000 Z"
    }
  ],
  user: "5cf53a1a8481923f72939940",
  createdAt: "2019 - 06 - 05 T14: 43: 08.706 Z",
  updatedAt: "2019 - 06 - 05 T14: 43: 08.706 Z",
  __v: 0
}

const offer = obj.offer;
const instalments = obj.instalments.map(instalment => ({...instalment, offer}));

console.log(obj.instalments);

关于javascript - 如何将新元素推送到数组中的所有对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56463115/

相关文章:

javascript - 可以将 ChartRangeFilter 添加到气泡图中吗?

javascript - Jquery AJAX 不从 PHP 文件中获取 JSON

javascript - 我可以将逻辑运算符放在 document.querySelectorAll 中吗?如果是这样,如何?

javascript - carousell 每个 div 都做一些其他的事情 onclick

javascript - 如何从外部网页引用 HTML

javascript - 使用扫描的 DynamoDB 读取峰值

javascript - 如何自动随机化 46 个名称以在 Google 表格中创建 46 x 6 唯一行和列?

javascript - raphael js Pan 功能使用 raphael-pan-zoom

javascript - 尝试将用户定向到新的 HTML 页面时出现问题 Python Bottle

javascript - 为什么在iife中使用赋值运算符时 'this'指向 'window' obj?