从AngularJS中的JSON数组中通过id获取特定的JSON对象

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (38)

我有一个JSON文件,其中包含一些我想在我的AngularJS网站上访问的数据。现在我想要的只是从数组中获取一个对象。所以我喜欢例如ID为1的项目。

数据如下所示:

{ "results": [
    {
        "id": 1,
        "name": "Test"
    },
    {
        "id": 2,
        "name": "Beispiel"
    },
    {
        "id": 3,
        "name": "Sample"
    }
] }

我想用这样的AngularJS $ http功能加载数据:

$http.get("data/SampleData.json");

这工作。但是,我现在怎么能从我得到的数组中获得一个特定的数据对象(通过id)$http.get

提问于
用户回答回答于

唯一的方法是迭代数组。很明显,如果你确定结果是按ID排序的,你可以进行二分搜索

用户回答回答于

使用ES6解决方案

如果你使用的是ES6,那么这个find方法就会添加到数组中。因此,假设相同的集合,解决方案是:

const foo = { "results": [
    {
        "id": 12,
        "name": "Test"
    },
    {
        "id": 2,
        "name": "Beispiel"
    },
    {
        "id": 3,
        "name": "Sample"
    }
] };
foo.results.find(item => item.id === 2)

我现在完全去找这个解决方案,因为它更少与角度或任何其他框架绑定。纯Javascript。

角度解决方案(旧解决方案)

我旨在通过执行以下操作来解决此问题:

$filter('filter')(foo.results, {id: 1})[0];

用例示例:

app.controller('FooCtrl', ['$filter', function($filter) {
    var foo = { "results": [
        {
            "id": 12,
            "name": "Test"
        },
        {
            "id": 2,
            "name": "Beispiel"
        },
        {
            "id": 3,
            "name": "Sample"
        }
    ] };

    // We filter the array by id, the result is an array
    // so we select the element 0

    single_object = $filter('filter')(foo.results, function (d) {return d.id === 2;})[0];

    // If you want to see the result, just check the log
    console.log(single_object);
}]);

扫码关注云+社区