从 AngularJS 中的对象数组中按 id 获取特定对象

2022-08-30 05:31:27

我有一个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

提前感谢您的帮助。

问候马克


答案 1

使用 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)

我现在完全会选择这个解决方案,因为它与angular或任何其他框架的联系较少。纯 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);
}]);

Plunker: http://plnkr.co/edit/5E7FYqNNqDuqFBlyDqRh?p=preview


答案 2

对于任何查看此旧帖子的人来说,这是目前最简单的方法。它只需要一个AngularJS。它就像Willemoes的答案一样,但更短,更容易理解。$filter

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

var object_by_id = $filter('filter')(foo.results, {id: 2 })[0];
// Returns { id: 2, name: "Beispiel" }

警告

正如@mpgn所说,这不能正常工作。这将捕获更多结果。示例:当您搜索3时,这也将捕获23