我有一个字符串数组var allEmojis = [dog, toucan, flamingo, lion, tiger, duck, elephant, zebra]
和一个显示的对象数组,我是从mongoose获得的。对象数组中的每个对象都具有从allEmojis数组中过滤的属性emoji。 (下面是对象数组)
我想像这样过滤数组:
让我们假设对象数组只是:'ArrayOfObjects'
var JohnsEmojis = allEmojis.filter(function(emoji) {
return !ArrayOfObjects.includes(emoji) /*=>>> where the object in ArrayOfObjects
containing the emoji has an id of John not yoyoyo (yes i know, dumb name); */
})
var yoyoyoEmojis = allEmojis.filter(function(emoji) {
return !ArrayOfObjects.includes(emoji) /*=>>> where the object in ArrayOfObjects
containing the emoji has an id of yoyoyo not John; */
})
我的代码在两个方面都失败了。您不能在具有字符串数组的对象数组上使用include
。假设这确实有效,它不会根据具有指定id的对象进行过滤。我希望我能找到最有效的方法来做到这一点。
答案 0 :(得分:1)
您在没有引号的情况下编写了allEmojis
var allEmojis = [dog, toucan, flamingo, lion, tiger, duck, elephant, zebra]
字符串数组
var allEmojis = ["dog", "toucan", "flamingo", "lion", "tiger", "duck", "elephant", "zebra"]
如果这不是问题且allEmojis
确实包含一个字符串,该字符串位于密钥arrayOfObjects
下的每个对象的object.emoji
中,那么您可以过滤allEmojis
的交集与arrayOfObjects
一样
var filtered = allEmojis.filter(function(e) {
return !!arrayOfObjects.find(function(o) {
return o.emoji === e;
});
};
你也可以把它写成
var filtered = arrayOfObjects
.filter(function(o) { return allEmojis.includes(o.emoji) })
.map(function(o) { return o.emoji }); // convert objects to strings
可能有更好的表现。