8

eventというオブジェクトの配列がありますevents。それぞれeventmarkets、オブジェクトを含む配列がありmarketます。この内部には、オブジェクトoutcomesを含むという別の配列がありoutcomeます。

Underscore.js またはその他の方法を使用して、という名前のプロパティを持つ結果を持つ市場を持つすべてのイベントを見つけたいと考えていますtest

これは一連のフィルターを使用して達成されると思いますが、あまり運がありませんでした!

4

4 に答える 4

14

filterUnderscore.jsおよびsome(別名「any」) メソッドを使用してこれを行うことができると思います。

// filter where condition is true
_.filter(events, function(evt) {

    // return true where condition is true for any market
    return _.any(evt.markets, function(mkt) {

        // return true where any outcome has a "test" property defined
        return _.any(mkt.outcomes, function(outc) {
            return outc.test !== undefined ;
        });
    });
});
于 2012-05-30T18:03:52.810 に答える
0

var events = [
  {
    id: 'a',
    markets: [{
      outcomes: [{
        test: 'yo'
      }]
    }]
  },
  {
    id: 'b',
    markets: [{
      outcomes: [{
        untest: 'yo'
      }]
    }]
  },
  {
    id: 'c',
    markets: [{
      outcomes: [{
        notest: 'yo'
      }]
    }]
  },
  {
    id: 'd',
    markets: [{
      outcomes: [{
        test: 'yo'
      }]
    }]
  }
];

var matches = events.filter(function (event) {
  return event.markets.filter(function (market) {
    return market.outcomes.filter(function (outcome) {
      return outcome.hasOwnProperty('test');
    }).length;
  }).length;
});

matches.forEach(function (match) {
  document.writeln(match.id);
});

ライブラリに依存せずに行う方法は次のとおりです。

var matches = events.filter(function (event) {
  return event.markets.filter(function (market) {
    return market.outcomes.filter(function (outcome) {
      return outcome.hasOwnProperty('test');
    }).length;
  }).length;
});
于 2014-10-21T22:25:22.597 に答える
0

これを試して:

_.filter(events, function(me) { 
    return me.event && 
        me.event.market && me.event.market.outcome && 
        'test' in me.event.market.outcome
}); 

デモ

于 2012-05-30T18:04:06.757 に答える