2017-06-22 55 views
1

我正在嘗試執行以下操作,其中foo是填充'out'數組的函數。 但是對於數據中心對象中的每個數據中心,推出的數組將被新值覆蓋。數組以前的值在angularjs中被覆蓋

我想防止這種覆蓋。 如何在循環中創建新的數組引用/實例?

_.map(datacenters, function(datacenter){  
     var out = [] 
     foo(datacenter, out); 
     $scope.dcSelected.push(out); 
    }); 
+0

'foo()'具體做什麼?請顯示代碼。 –

+1

foo向out.push(obj1),out.push(obj2),out.push(obj3)等 –

回答

-1

你有2種選擇:

1)創建一個封閉

2)創建另一個陣列控制器的一部分,將存儲的數據中心,並進行一系列聯動,把它想象作爲一個關鍵,價值,但在同一個控制器的全局變量。

0

您可以嘗試angularJs的angular.copy(out)。希望它會爲你

_.map(datacenters, function(datacenter){  
     var out = [] 
     foo(datacenter, out); 
     $scope.dcSelected.push(angular.copy(out)); 
    }); 
+0

嘗試添加對象。但仍然覆蓋以前的值。 –

+0

因爲數組引用由foo函數返回,所以值越來越重複覆蓋。您應該將代碼移動到foo函數中的範圍變量$ scope.dcSelected.push(foo函數中的本地變量)中推送數據,而不是絕對地爲您工作。 –

1

在外面工作把你的out聲明:

var out = []; 
_.map(datacenters, function(datacenter){  
    foo(datacenter, out); 
    $scope.dcSelected.push(out); 
}); 
+0

我認爲這是主要原因,加上一個! –

+0

試過這個。但無法解決問題。 –

+0

@SanketAchari你可以在控制檯上記錄結果嗎? –

0

我不完全明白你想要做什麼,所以我會做一個普通的例子:

var datacenters = [1,2,3,4] 

var out = [] 
datacenters.map(function(datacenter){  

     datacenter2 = datacenter + 1; 
     out.push(datacenter2); 
    }); 

console.log(out); 

[2,3,4,5]

(我用這種方式,因爲我沒有爲js導入下劃線)