通过角度方式在对象数组中按属性查找对象

rra*_*ram 44 javascript arrays angularjs

我有一个像下面的数组

var myArray = [{'id':'73','name':'john'},{'id':'45','name':'Jass'}, etc.]
Run Code Online (Sandbox Code Playgroud)

现在我有id73如何从数组中选择这个特定的对象.我看到我可以使用grep轻松地在jQuery中执行此操作是否有任何有角度的方式来执行此操作?

由于大多数用户开发具有角度的应用程序始终从对象数组(主要是表格)获取数据,因此应该有一个辅助函数吗?

这样我就可以通过更新对象数组来更改行的数据和行的ID.

我不想在视图中绑定它.我想操纵数据并使用函数更新数据.

例如.我有一个表格列表.如果最终用户从表中编辑一行我有对象的ID,那么在最终用户点击保存后,我需要更新数组然后再返回表列表.

M B*_*M B 72

你可以使用angular的filter https://docs.angularjs.org/api/ng/filter/filter

在你的控制器中:

$filter('filter')(myArray, {'id':73}) 
Run Code Online (Sandbox Code Playgroud)

或在您的HTML中

{{ myArray | filter : {'id':73} }}
Run Code Online (Sandbox Code Playgroud)

  • 值得注意的是,上面的代码将基于作为子字符串的ID进行过滤.因此,对id为73的过滤也会找到733,4573,173等.要进行严格的比较,您必须根据文档传递第三个比较器参数'true'. (18认同)
  • 只是给学习者一个注释,我们需要在控制器中传递`$ filter`才能使用这种方法. (4认同)

Tim*_*imo 41

简单的JavaScript怎么样?更多关于Array.prototype.filter().

var myArray = [{'id': '73', 'name': 'john'}, {'id': '45', 'name': 'Jass'}]

var item73 = myArray.filter(function(item) {
  return item.id === '73';
})[0];

// even nicer with ES6 arrow functions:
// var item73 = myArray.filter(i => i.id === '73')[0];

console.log(item73); // {"id": "73", "name": "john"}
Run Code Online (Sandbox Code Playgroud)


Dav*_*ral 7

为了获得完整的M B答案,如果您想访问已经从HTML数组中过滤掉的该对象的特定属性,则必须采用以下方式:

{{ (myArray | filter : {'id':73})[0].name }}

因此,在这种情况下,它将john以HTML格式打印。

问候!