2016-12-25 124 views
-1

我有一个字符串数组var allEmojis = [dog, toucan, flamingo, lion, tiger, duck, elephant, zebra]和我从猫鼬获得的对象数组。对象数组中的每个对象都具有从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的对象进行过滤。我希望能找到最有效的方式来做到这一点。

+0

你能特别用文字描述你想达到的目标吗?你想过滤所有的表情符号?另一个数组是否包含该表情符号?这些ID与它有什么关系? – pvg

+0

我有一个包含所有emojis的数组。我有一个对象数组,每个元素都有一个id和一个表情符号。在上面的图片中,你可以看到约翰有emojis火烈鸟和鸭子。所以我需要一个John的emojis数组,它可以过滤来自johns emojis的所有emojis。所以所有的emojis = [狗,巨嘴鸟,火烈鸟,狮子,老虎,鸭子,大象,斑马],约翰的表情= [火烈鸟,鸭子]。所以过滤应该是[狗,巨嘴鸟,狮子,老虎,大象,斑马]。同样的事情适用于有yoyoyo的元素。我需要一个为yoyoyo创建的数组,它可以从yoyoyo的emojis中过滤所有表情符号。 – Ryan

回答

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,那么你可以过滤allEmojisarrayOfObjects的交集

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 

这可能具有更好的性能。