41

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

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

{"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;
    });
});

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

4

3 に答える 3

99

アップデート

それは 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"});
于 2012-10-05T10:49:28.350 に答える
21

オブジェクトの配列を使用しています。したがって、次を使用できます。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);

uses のすべてのリストが必要な場合は
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

于 2014-08-21T07:18:07.613 に答える
15

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

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で実際の動作を確認できます。

于 2012-10-05T10:47:46.220 に答える