简体   繁体   English

将 object 数组中的键值替换为另一个具有相同键的 object

[英]Replace key value inside array of object with another object with same key

Suppose I have an array of object:假设我有一个 object 数组:

const purchaseDetails = [
  {
      amount: '4567',
      purchaseOrder: 'B234',
      purchaseDate: '10/12/2020',
      someRandom1: '123',
      someRandom2: '345'
   },
   {
      amount: '4567',
      purchaseOrder: 'B234',
      purchaseDate: '10/12/2020',
      someRandom1: '678',
      someRandom2: '987'
    }
]

and another object as:和另一个 object 为:

const toReplace = {
      amount: '1211',
      purchaseOrder: 'A123',
      purchaseDate: '12/30/2020',
      vat: '123',
 }

I want to replace value of purchaseDetails with toReplace value我想用 toReplace 值替换 purchaseDetails 的值

O/p as: O/p 为:

const purchaseDetails = [
    {
         amount: '1211',
         purchaseOrder: 'A123',
         purchaseDate: '12/30/2020',
         vat: '123',
         someRandom1: '123',
         someRandom2: '345'
     },
     {
         amount: '1211',
         purchaseOrder: 'A123',
         purchaseDate: '12/30/2020',
         vat: '123',
         someRandom1: '678',
         someRandom2: '987'
      }
  ]

For this i tried as:为此,我尝试如下:

purchaseDetails.forEach(element => {
  element.amount=toReplace.amount,element.purchaseOrder=toReplace.purchaseOrder,
   element.purchaseDate=toReplace.purchaseDate,element.tax=toReplace.tax
});

But it doesnot replace the value...i tried with single value as well but it's not working.但它不会取代价值......我也尝试过使用单一价值,但它不起作用。

As per provided solution it was assignment issue.根据提供的解决方案,这是分配问题。

But the second solution provided, when I try:但是当我尝试时,提供了第二种解决方案:

purchaseDetails.forEach(element => {
        element = {...element, ...avacado}
        console.log(element)
});

On console.log(element), it shows element with value changed but console.log(purchaseDetails) value doesnot change.在 console.log(element) 上,它显示值更改但 console.log(purchaseDetails) 值不变的元素。

If you instead declare purchaseDetails via let (thus allowing reassigning the result of map call later), you can use Array.prototype.map :如果您改为通过let声明purchaseDetails (因此允许稍后重新分配map调用的结果),您可以使用Array.prototype.map

 let purchaseDetails = [{ amount: '4567', purchaseOrder: 'B234', purchaseDate: '10/12/2020', someRandom1: '123', someRandom2: '345' }, { amount: '4567', purchaseOrder: 'B234', purchaseDate: '10/12/2020', someRandom1: '678', someRandom2: '987' } ] const toReplace = { amount: '1211', purchaseOrder: 'A123', purchaseDate: '12/30/2020', vat: '123', } purchaseDetails = purchaseDetails.map(obj => ({...obj, ...toReplace })); console.log(purchaseDetails);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM