Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript angularjs:从密钥对解析值_Javascript_Angularjs - Fatal编程技术网

Javascript angularjs:从密钥对解析值

Javascript angularjs:从密钥对解析值,javascript,angularjs,Javascript,Angularjs,有什么简单的方法可以在数组中找到一个键并返回它的值,而不是使用angularjs返回键(可能通过使用表达式) 现在,我做了这样的事情: vm.topics = [{id:1,value:"a"} , {id:2,value:"b"} , {id:3,value:"c"}]; vm.tickets= [{topic:2,summary:"summary 1"} , {topic:1,summary:"summary 2"}]; vm.getTopicName = function (id) {

有什么简单的方法可以在数组中找到一个键并返回它的值,而不是使用angularjs返回键(可能通过使用表达式)

现在,我做了这样的事情:

vm.topics = [{id:1,value:"a"} , {id:2,value:"b"} , {id:3,value:"c"}];
vm.tickets= [{topic:2,summary:"summary 1"} , {topic:1,summary:"summary 2"}];
vm.getTopicName = function (id) {
    for (int t=0 ; t<vm.topics.length ; t++)
        if (vm.topics[t].id == id)
            return vm.topics[t].value;
    return id;
};
vm.topics=[{id:1,值:“a”},{id:2,值:“b”},{id:3,值:“c”}];
tickets=[{topic:2,summary:“summary 1”},{topic:1,summary:“summary 2”}];
vm.getTopicName=函数(id){

对于(int t=0;t实际上您使用了两个不同的数组,根据您的评论(ajax调用),我将在服务中创建一个新数组,该数组合并
主题
票证
,类似于:

[... ,
 {
  topic:2,
  summary:"summary 1",
  ticket_value: "b"
 },
... ]
所以控制器应该只绘制它(没有额外的逻辑)。这种方式将减少
ng repeat
循环中的观察者,并且您不需要调用(重建)
getTopicName()

我认为这是一种正确的方式,


为了简化示例,如果使用库,可以编写:

 <td>{{topics[_.findIndex(topics, {id: item.topic})].value}}</td>

**请注意,尽量避免从HTML调用方法,如:

<td>{{vm.getTopicName(item.topic)}}</td>
{{vm.getTopicName(item.topic)}

为什么您的Id不是对象Id?比如
vm.topics={1:a,2:b,3:c}
这将允许您执行类似
topics[item.topic]
这是一个简化的示例。使用ajax和服务器端响应的实际应用程序调用每个数组都是一个对象列表。这听起来不对;)只要ID是唯一的,你仍然可以使用相同的方法。这不会变慢吗?@jantimon你提到了一个好的观点,我更喜欢在服务中管理数据,而不是在控制器中管理数据。参见回答的第一部分Maxim给出的答案正是我想要的。票证列表经常变化。我不喜欢每次新票证时都添加它们到达(特别是当最多有3或4个主题时),因此我将使用@jantimon的解决方案。
<td>{{vm.topics1(item.topic)}}</td>
[... ,
 {
  topic:2,
  summary:"summary 1",
  ticket_value: "b"
 },
... ]
 <td>{{topics[_.findIndex(topics, {id: item.topic})].value}}</td>
<div data-ng-repeat="item in tickets"> 
    <td>{{topics[_.findIndex(topics, {id: item.topic})].value}}    </td>
</div>
$scope._ = _;

$scope.topics = [{id:1,value:"a"} , {id:2,value:"b"} , {id:3,value:"c"}];

$scope.tickets = [{topic:2,summary:"summary 1"} , {topic:1,summary:"summary 2"}];
<td>{{vm.getTopicName(item.topic)}}</td>