2016-05-18 46 views
0

編輯重置JS數組並用一行代碼設置動態密鑰數組?

以下問題How do I empty an array in JavaScript?不回答我得到了如何設置/重置陣列但那不是我的問題的問題,即。我想要做的是:

  1. 用動態值設置密鑰,例如, UUID和
  2. 然後在一行代碼中將元素[0](上面)設置爲true。

問題

代碼庫:角1.5倍,lodash 4.x的

似乎是一個基本的問題,但無法找到答案。是否可以使用JS,Angular或lodash來重置數組,並按照下面的示例同時設置它。根據下面的例子,數組將繼續推動,除非我設置重置它。爲什麼要問,例如,如果我在HTML中使用UUID作爲鍵,

HTML

<li id="{[{contactus.app_id}]}" 
    ng-show="view.state[item.uuid]" 
    ng-repeat="item in collection.items track by item.uuid"> 
</li> 

JS(角)

注:此代碼的工作,我也可以使用替代$scope.view.state.length = 0;$scope.view.state = [];但我的問題是沿着正在重置數組的線條更,添加一個動態密鑰並將其設置爲true,所有內容都在一行代碼中。複雜性是動態的關鍵。

$scope.view = {state:[]}; 

$scope.setViewState = function (id) { 
    // how can I collapse the following 2 lines of code into one 
    $scope.view.state = []; 
    $scope.view.state[id] = true; 
}; 
+0

是'id'一個字符串或數字? (因爲如果它是一個非數字的字符串設置長度爲0不是做你認爲它做的)。 –

+0

一個字符串 - 在後端,我添加一個alpha前綴到uuid和連字符脫水。上面的代碼工作,我想知道如何將它代入1行代碼。 – Nolan

+1

你會想從一個數組''[]''變成一個對象'{}' - 然後你可以重新賦值到'$ scope.view.state = {[id] = true};'使用計算屬性。 (但是,如果您需要支持舊瀏覽器,那麼您現在需要使用兩行代碼。) –

回答

1

可以使用計算屬性來做到這一點的一條線:

$scope.view.state = {[id]: true}; 

然而,這僅在最新的瀏覽器(Chrome瀏覽器,火狐,Safari 7.1+和邊緣),如果工作你有任何需要解析你的代碼的構建步驟,他們也需要升級來理解語法。

如果您需要較舊的瀏覽器支持(或者您的構建工具無法升級),那麼您需要分兩步完成。但是,您可以隱藏功能的步驟:

function initialState(key, value) { 
    var result = {}; 
    result[key] = value; 
    return result; 
} 

那麼你可以簡單地做:

$scope.view.state = initialState(id, true); 
+0

肖恩,感謝一百萬。基於你的回答,我會堅持2行,因爲我的一些用戶會有更舊的瀏覽器。我懷疑瀏覽器依賴的原因是angular/js的版本?我會去做一些研究,因爲我很感興趣 – Nolan