web-dev-qa-db-ja.com

アンダースコアjs IDでアイテムを検索

私はUnderscore jsを初めて使用し、その使用方法について少し混乱しています。 「目標」のコレクションがあり、IDでその1つを見つけたいです。

データは次のとおりです。

{"goal":[
    {
        "category" : "education",
        "title" : "Charlie University",
        "description" : "Lorem ipsum dolor sit amet",
        "date" : "01/03/2020",
        "value" : 50000,
        "achievability" : 3,
        "experimental_achievability": 3,
        "suggested": false,
        "accounts": [
            {
                ...
            },
            {
                ...
            }
        ],
        "articles": [
            {
                ...
            },
            {
                ...
            },
            {
                ...
            }
        ],
        "related_goals": [
            {
                ...
            }
        ],
        "id":"1"
    },
    {
        "category" : "family",
        "title" : "Getting married",
        "description" : "Lorem ipsum dolor sit amet",
        "date" : "01/03/2022",
        "value" : 10000,
        "achievability" : 3,
        "experimental_achievability": 2,
        "suggested": true,
        "accounts": [
            {
                ...
            }
        ],
        "articles": [
            {
                ...
            },
            {
                ...
            },
            {
                ...
            }
        ],
        "related_goals": [
            {
                ...
            }
        ],
        "id":"2"
    }
    ...
]}

それが私がやろうとしていることです、配列/オブジェクト全体を取得して、その各フィールドを取得できるようにします:

var goalId = 1;
_.each(result.goal, function(item){
    _.find(result.goal, function(i){
         return i = goalId;
    });
});

それを行う方法はありますか?

36
Mauro74

更新

2016年であり、それを達成するためにアンダースコアを必要としないかもしれません。 Array.prototype.find()を使用します。配列の要素が提供されたテスト関数を満たす場合、配列の値を返します。それ以外の場合、undefinedが返されます。

  // Underscore
  var users = [
    { 'user': 'barney',  'age': 36, 'active': true },
    { 'user': 'fred',    'age': 40, 'active': false },
    { 'user': 'pebbles', 'age': 1,  'active': true }
  ]

  _.find(users, function (o) { return o.age < 40; })
  // output: object for 'barney'

  // Native
  var users = [
    { 'user': 'barney',  'age': 36, 'active': true },
    { 'user': 'fred',    'age': 40, 'active': false },
    { 'user': 'pebbles', 'age': 1,  'active': true }
  ]

  users.find(function (o) { return o.age < 40; })
  // output: object for 'barney'

ブラウザのサポート

--------------------------------------------
| Chrome | Firefox | Safari |  IE  | Opera |
|--------|---------|--------|------|-------|
|   45   |    25   |  7.1   | Edge |  32   |
--------------------------------------------

詳細情報 [〜#〜] mdn [〜#〜] のポリフィル


更新_.whereは常に配列を返します。 _.findWhere は、最初に見つかったオブジェクトを返します。そのため、1つのオブジェクトが返されると予想される場合に使用する方が適切です。


_.where それははるかに簡単です。

このようなものの場合:

var goal  = [

    {
        "category" : "education",
        "title" : "Charlie University",
        "description" : "Lorem ipsum dolor sit amet",
        "date" : "01/03/2020",
        "value" : 50000,
        "achievability" : 3,
        "experimental_achievability": 3,
        "suggested": false,
        "accounts": [],
        "articles": [],
        "related_goals": [],
        "id":"1"
    },
    {
        "category" : "education",
        "title" : "Charlie University",
        "description" : "Lorem ipsum dolor sit amet",
        "date" : "01/03/2020",
        "value" : 50000,
        "achievability" : 3,
        "experimental_achievability": 3,
        "suggested": false,
        "accounts": [],
        "articles": [],
        "related_goals": [],
        "id":"2"
    },
    {
        "category" : "education",
        "title" : "Charlie University",
        "description" : "Lorem ipsum dolor sit amet",
        "date" : "01/03/2020",
        "value" : 50000,
        "achievability" : 3,
        "experimental_achievability": 3,
        "suggested": false,
        "accounts": [],
        "articles": [],
        "related_goals": [],
        "id":"3"
    },
    {
        "category" : "education",
        "title" : "Charlie University",
        "description" : "Lorem ipsum dolor sit amet",
        "date" : "01/03/2020",
        "value" : 50000,
        "achievability" : 3,
        "experimental_achievability": 3,
        "suggested": false,
        "accounts": [],
        "articles": [],
        "related_goals": [],
        "id":"4"
    }
]

次のようなものを使用できます。

var filteredGoal = _.where(goal, {id: "1"});
91
Ahmad Alfy

オブジェクトの配列を使用しています。したがって、次を使用できます:_。findWhere(リストを調べて、すべてのキーと値のペアに一致します)、idまたは他のキー属性に基づいてすべてのプロパティを取得します。

var some= [
             {Employee:'ved',id:20}, 
             {Employee:"ved",age:25},
             {Employee:"p",age:2}
          ];

var a = _.findWhere(some,{id:20});
console.log('searchResult',a);

インデックスを取得するには、次のようなものを使用できます。

var b = _.indexOf(some,a);
console.log('index',b);

すべての使用リストが必要な場合
[〜#〜] try [〜#〜]_。where(配列内の各オカレンスを調べ、プロパティにリストされたキーと値のペアを含むすべての値の配列を返します。)

var some= [ 
            {Employee:"ved",id:20}, 
            {Employee:"ved prakash",id:20},
            {Employee:"anyone",id:2}
          ];
var a = _.where(some,{id:25});
    console.log('searchResult',a);

_.find:キーと値の両方ではなく、値のみをチェックするために使用されます。


ドキュメントにアクセス: _。find

21
Ved

データモデルを単純化しましたが、次のようなものですか?

var goals = [{id:1, name:'Goal1'},
             {id:2, name:'Goal2'},
             {id:3, name:'Goal3'}];

function getGoal(id) {
    return _.find(goals, function(goal) {
        return goal.id === id;
    });
}

alert(getGoal(2).name);

この jsFiddle で実際の動作を確認できます。

15
Gwyn Howell