【问题标题】:JSON & angularjs. Filter an array by ID (and not by index)JSON & angularjs。按 ID 过滤数组(而不是按索引)
【发布时间】:2017-01-30 14:24:39
【问题描述】:

如何在不使用索引的情况下按元素(在本例中为 id)过滤此 JSON?

     ABC: [{
 ID: home,
 elementsHome: [
       {
       el1: x,
       el2: y},
       {
       el3: d,
       el4: s}]
  },
  {
  ID: payments,
  elementsPaymets: etc...
  }];

这样的 ng-repeat html 不起作用:ng-repeat: item in ABC.element2 |过滤器:{id:“好”}。唯一的方法是以 ABC[0] 的方式重写 ABC,但这是我想要避免的。

谢谢

【问题讨论】:

  • 能不能不用Array.prototype.filter,按ID属性过滤?
  • 你能给我举个例子吗?我还是一个初级 angularjs :P
  • 如果你不使用 ES6 .. 而你使用的是 es5 .. 试试 LODASH .. 方法 _.filter() 或者 _.find() 会适合你
  • 什么是ABC.element2?如果您过滤 <div ng-repeat="item in ABC | filter:{id:'good'}">{{item.id}} </div> 这有效。
  • Dario(意大利语?)问题是我想像过滤器一样使用 id 但我不想显示它。我需要显示 element2 中的元素。

标签: javascript angularjs arrays json


【解决方案1】:
ABC.filter(function(item) {
  return item.id === 'whatever you want to check'
})

Array.prototype.filter 遍历一个数组并根据您提供的函数返回一个新的过滤数组。该函数接收数组项、索引和数组作为参数。您的函数必须返回 true 或 false。如果迭代返回 true,则保留,如果返回 false,则删除。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter


编辑

听起来您实际上是在尝试在数组中查找单个项目并访问其上的属性。所以如果你知道你的身份证:

var curId = 'HOME'

然后您就可以找到具有该 id 的项目:

var item = ABC.find(function(item) {
  return item.id === curId
})

如果有匹配项,您可以访问所需的密钥:

item && item['elements' + curId.substr(0, 1) + curId.substr(1).toLowerCase()]

【讨论】:

  • 我曾希望 OP 能自己解决这个问题,但你举了一个很好的例子。现在你能解释一下它的作用吗?
  • 我试试这个,我会给你一个关于结果的反馈:P
  • 我正在尝试在我的 angularjs 文件中包含此代码的翻译。 (此外,我必须更改“item.id”之类的内容,因为我的 id 是我在 ng repeat 中调用的项目之一,而不是“儿子”)
  • 请提供一些更完整的代码,以便我们清楚地了解您要完成的工作。
  • 情况是这样的:我必须在我的主页中包含一个 ID = home 的教程代码。此外,我还有另一个教程要包含在 ID = 付款的网站的另一个部分中。所以:
【解决方案2】:
_.filter(ABC, { 'id': 'good' });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-22
    • 2021-01-18
    相关资源
    最近更新 更多