针对多个值过滤对象,仅返回完美匹配

时间:2019-10-15 22:12:12

标签: javascript arrays firebase

我有一组配方对象,每个对象都包含一个带有值数组的ingredients键-像这样:

'soup': {'ingredients': ['carrot', 'pepper', 'tomato']}, 
'pie': {'ingredients': ['carrot', 'steak', 'potato']}, 
'stew': {'ingredients': ['steak', 'pepper', 'tomato']}

对于每个配方,我想获取一个值数组并查询ingredients数组-仅返回与所有值匹配的配方。

例如:

var shoppingList = ['carrot', 'steak', 'tomato', 'pepper']

// returns: soup, stew

我尝试使用Array.prototype.filter(),该方法返回的对象包含所查询值的任何。但是我只需要返回包含所有值的对象。

换句话说,如果我没有马铃薯,就不要告诉我我可以做馅饼。

数据最初来自Firebase查询,但是AFAIK无法使用Firebase进行此服务器端的操作。

谢谢。

2 个答案:

答案 0 :(得分:2)

  1. Object.entries从对象中提取键/值对
  2. 使用Array#everyArray#includes过滤掉ingredientsshoppingList中没有所有var recipes = { 'soup': {'ingredients': ['carrot', 'pepper', 'tomato']}, 'pie': {'ingredients': ['carrot', 'steak', 'potato']}, 'stew': {'ingredients': ['steak', 'pepper', 'tomato']} }; var shoppingList = ['carrot', 'steak', 'tomato', 'pepper'] var result = Object.entries(recipes)//1. get the key-value pairs .filter(([key, {ingredients}]) => ingredients.every(t => shoppingList.includes(t))) //2. filter them .map(([key]) => key) //3. get the keys only console.log(result);的任何对象。
  3. 使用Array.map仅获取密钥。

class User(db.Model):    
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(64))

    address = db.relationship("Address", backref="user", 
              cascade="all, delete-orphan", lazy=False,
              uselist=False, passive_deletes=True)

class Address(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    line1 = db.Column(db.String(128))
    zip = db.Column(db.String(20), index=True)
    city = db.Column(db.String(64), index=True, nullable=False)
    user_id = db.Column(db.Integer, db.ForeignKey("user.id",
                                              ondelete="CASCADE"))

答案 1 :(得分:0)

.every()回调中将.includes().filter()一起使用。

return query.every(q => obj.taggedItems.includes(q))