重置JS数组并用一行代码设置动态键数组?

时间:2016-05-18 15:46:51

标签: javascript angularjs

修改

以下问题How do I empty an array in JavaScript?没有回答这个问题,即我得到了如何设置/重置数组但这不是我的问题。我想要做的是:

  1. 使用动态值设置密钥,例如UUID和,
  2. 然后在一行代码中将element [0](上面)设置为true。
  3. 问题

    代码库:Angular 1.5x,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(Angular)

    注意:此代码有效,我也可以将$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;
    };
    

1 个答案:

答案 0 :(得分:1)

您可以使用计算属性在一行中执行此操作:

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

但是,这仅适用于最新的浏览器(Chrome,Firefox,Safari 7.1+和Edge),如果您有任何需要解析代码的构建步骤,则还需要升级以理解语法为好。

如果您需要较旧的浏览器支持(或者如果您的构建工具无法升级),那么您需要分两步完成。但是,您可以在函数中隐藏这些步骤:

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

然后你就可以做到:

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