Javascript angularjs:从密钥对解析值
有什么简单的方法可以在数组中找到一个键并返回它的值,而不是使用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) {
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>