簡體   English   中英

推送到地圖/承諾中的新數組

[英]Push to a new array inside a map/promise

這是我當前設置的簡化版本。

運行此代碼時,您會注意到修改changes數組還會操縱原始的referrals數組。 這是因為我要push送到map函數內部的changes數組嗎? 如何在不修改referrals數組的情況下修改changes數組?

 var referrals = [ { id: 1, name: 'John', change: true }, { id: 2, name: 'Sally', change: false }, { id: 3, name: 'Kim', change: true } ]; var changes = []; var process = referrals.map(function(referral) { return new Promise(function(resolve, reject) { if (referral.change) { changes.push(referral); } resolve(); }); }); Promise.all(process).then(function() { console.log('referrals before:', referrals); changes = changes.map(function(change) { change.change_id = change.id; delete change.id; return change; }); console.log('changes:', changes); console.log('referrals after:', referrals); }); 

您只需要創建內部對象的深層副本,就可以使用lodash deepClone或spread運算符來完成。

像這樣:

var referrals = [
{
  id: 1,
  name: 'John',
  change: true
},
{
  id: 2,
  name: 'Sally',
  change: false
},
{
  id: 3,
  name: 'Kim',
  change: true
}
];

var changes = [];

var process = referrals.map(function(referral) {
  return new Promise(function(resolve, reject) {
    if (referral.change) {
      changes.push({...referral}); // You will create a copy here.
    }
    resolve();
  });
});

Promise.all(process).then(function() {
  console.log('referrals before:', referrals);
  changes = changes.map(function(change) {
  change.change_id = change.id;
  delete change.id;
  return change;
});

console.log('changes:', changes);
console.log('referrals after:', referrals);
});

感謝blex引導我了解這里的情況。 本質上,當我將對象推送到新數組時,我推送的是整個引用,而不僅僅是副本。 使用Object.assign克隆對象解決了我的問題。

這是整個編輯供參考:

 var referrals = [ { id: 1, name: 'John', change: true }, { id: 2, name: 'Sally', change: false }, { id: 3, name: 'Kim', change: true } ]; var changes = []; var process = referrals.map(function(referral) { new Promise(function(resolve, reject) { if (referral.change) { changes.push(Object.assign({}, referral)); } resolve(); }); }); Promise.all(process).then(function() { console.log('referrals before:', referrals); changes = changes.map(function(change) { change.change_id = change.id; delete change.id; return change; }); console.log('changes:', changes); console.log('referrals after:', referrals); }); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM