从字符串数组中过滤对象数组

时间:2016-12-25 10:59:20

标签: javascript node.js

我有一个字符串数组var allEmojis = [dog, toucan, flamingo, lion, tiger, duck, elephant, zebra]和一个显示的对象数组,我是从mongoose获得的。对象数组中的每个对象都具有从allEmojis数组中过滤的属性emoji。 (下面是对象数组)

enter image description here

我想像这样过滤数组:

让我们假设对象数组只是:'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的对象进行过滤。我希望我能找到最有效的方法来做到这一点。

1 个答案:

答案 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

可能有更好的表现。