在没有循环的情况下在数组中查找值(angular)

时间:2015-10-23 12:11:48

标签: arrays angularjs angularjs-directive

我创建了用于替换字符串值

的angular指令

applabel指令:

app.directive('applabel',function(){

   return{
           templateurl:'label.html',
           restrict: 'E',
           replace: true,
           scope:{
                   'key' : '@',
                   'default' : '@' 
                 },   
           link : function(scope,elem,attr){

              var data = [{key: Id , value:"ID"},
                          { key: name, value: "Name"},
                          { key: sts, value: "status"} ];

              var keyVal = scope.key;
              for(var i = 0;i < data.length ; i++)
              {
                 if(keyVal = data.length[i].key)
                 {
                     scope.value = data.length[i].value;
                 }
                    else {
                       scope.value = scope.default;
                  }
              }   
}
   }

});

我的HTML代码是

<applabel key="name" default="Default Name">

</applabel>

label.html

<label>{{value}}</label>

输出将是:名称

此代码正常运行 但问题是我不希望在我的代码中循环,因为在数据数组中有太多的数据,我在我的页面中多次使用这个'applabel'指令,因此需要花费很多时间

任何没有循环我的值的解决方案都会被替换

提前致谢

4 个答案:

答案 0 :(得分:0)

如果您可以修改数据,则可以使用对象而不是数组。这种方式访问​​值是在恒定时间内完成的

app.directive('applabel',function(){

   return{
           templateurl:'label.html',
           restrict: 'E',
           replace: true,
           scope:{
                   'key' : '@',
                   'default' : '@' 
                 },   
           link : function(scope,elem,attr){

              var data = {Id:{value:"ID"},
                          name: {value: "Name"},
                          sts:{ value: "status"} };

              var keyVal = scope.key;
              scope.value=typeof data[keyVal] !=="undefined" ? data[keyVal].value : scope.default;
           }   
}
   }

});

如果您不需要向对象添加更多信息,则可以执行

var data = {Id:"ID", name:"Name", sts:"status"};
var keyVal = scope.key;
scope.value=typeof data[keyVal] !=="undefined" ? data[keyVal] : scope.default

答案 1 :(得分:0)

如果您将数据作为数组,则查找某些数据的唯一方法是迭代,如果您不想迭代,则可以将数据保存为哈希映射(JS对象)

答案 2 :(得分:0)

此代码有几个错误,但我想这是无关紧要的。

不使用每个都包含键和值字段的对象数组,而是使用单个对象:

{
    Id: 'ID', 
    name: 'Name',
    sts: 'status
}

然后只需使用

scope.value = data[scope.key] || scope.default;

您应该做的另一件事是从链接函数中定义数据:每次使用该指令时都无法重新创建一个全新的数组/对象。

答案 3 :(得分:0)

我发现underscorejs是一个非常有用的库,可以包含在我的项目中。有了它,您可以使用一些功能来获得您想要的东西。一个是_.find

&#13;
&#13;
var result = _.find(data, function(x){ return x.key === scope.key; });
scope.value = result.value;
&#13;
&#13;
&#13;