0

underscore.js を使用して、ある種の hasObject 関数を実装したいと考えています。

例:

var Collection = {
    this.items: [];
    this.hasItem: function(item) {
        return _.find(this.items, function(existingItem) { //returns undefined
            return item % item.name == existingItem.name;
        });
    }
};

Collection.items.push({ name: "dev.pus", account: "stackoverflow" });
Collection.items.push({ name: "margarett", account: "facebook" });
Collection.items.push({ name: "george", account: "google" });

Collection.hasItem({ name: "dev.pus", account: "stackoverflow" }); // I know that the name would already be enough...

何らかの理由でアンダースコアが未定義を返します...

私は何を間違っていますか?

4

2 に答える 2

4

アンダースコアのドキュメントを文字通り読みすぎているようです。

var even = _.find([1, 2, 3, 4, 5, 6], function(num){ return num % 2 == 0; });

ただし、これはあなたの場合には意味がありません。次のように、.nameプロパティが他のオブジェクトの と等しいかどうかを確認したいだけです.name

var Collection = {
    items: [],

    hasItem: function(item) {
        return _.find(this.items, function(existingItem) { //returns undefined
            return item.name === existingItem.name;
        });
    }
};
于 2012-07-15T14:31:09.780 に答える
0

名前とアカウントの両方の値を確認する必要があります。

var Collection = {
  this.items: [];
  this.hasItem: function(target) {
    return _.find(this.items, function(item) {
      return item.name === target.name && item.acount === target.account;
    });
  }
};

Backbone.js の使用を検討しましたか? コレクション管理のすべてのニーズを満たし、アンダースコアのメソッドも使用します。

// create a collection
var accounts = new Backbone.Collection();

// add models
accounts.add({name: 'dev.pus', account: 'stackoverflow'});
accounts.add({name: 'margarett', account: 'facebook'});
accounts.add({name: 'george', account: 'google'});

// getting an array.
var results = accounts.where({ name: 'dev.pus', account: 'stackoverflow' });
于 2012-07-15T14:49:29.270 に答える