我有一组配方对象,每个对象都包含一个带有值数组的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进行此服务器端的操作。
谢谢。
答案 0 :(得分:2)
Object.entries
从对象中提取键/值对Array#every
和Array#includes
过滤掉ingredients
中shoppingList
中没有所有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);
的任何对象。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))