簡體   English   中英

如何從數組和現有對象創建新對象?

[英]How can I create a new object from an array and an already existing object?

我試圖從一個已經存在的對象和數組中創建一個屬性名稱已修改的對象。

var ExistingObj = {'123' : 50, '456' : 60, '789' : 90}; 
var idsArr = ['123', '456', '789'];  

我想創建具有以下內容的對象數組:

var newArr = [{id : '123', amount: 50}, {id: '345', amount: 60}, {id:'789' : 90}];  

我試圖像這樣映射它,但不起作用:

var existingObj = {'123' : 50, '456' : 60, '789' : 90}; 
var idsArr = ['123', '456', '789'];  


function formatArr(idsArr, existingObj){
 var obj = {}; 
 var container = [];

 _.map(idsArr, function(id){
  obj.id = id;  
  obj.amount = existingObj[id];     
  container.push(obj); 
 });
  return container;
}

結果是:

container = [{'id' : '789', 'amount' : 90}, {id : '789', 'amount' : 90}, {id:'789', 'amount' : 90}];  

有任何想法嗎?

當前的方法重復使用相同的對象( var obj = {};_.map功能,因為它的外界定_.map呼叫。 因此,在每個步驟中,您都需要修改相同的對象 ,然后將其放入container變量中。 再次。 然后再次。 然后再次。

這就是為什么您將獲得一組相同記錄的原因-實際上,它們是對同一對象的引用。

顯然,這是錯誤的。 但是,更糟糕的是在_.map函數內部使用push :該函數的主要目的是基於其他集合構建數組,而無需添加自己的代碼即可。 可以這樣寫:

function formatArr(idsArr, existingObj) {
  return _.map(idsArr, function(id){
      return {
        id: id,
        amount: existingObj[id]
      });
  });
}

_.map ,使用_.map而不存儲其結果幾乎總是一個邏輯錯誤。 如果您不關心迭代結果,請使用_.each

謝謝(你的)信息! 我之所以能夠使其工作,是因為我在另一個函數中對其進行了調用:

function formatArr(idsArr, existingObj, fn){
  var newArr = _.map(idsArr, function(id){
    return {id: id, amount: existingObj[id]}
  });
  fn(newArr);
}

暫無
暫無

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

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