2016-12-25 2 views
-1

У меня есть массив строк var allEmojis = [dog, toucan, flamingo, lion, tiger, duck, elephant, zebra] и массив объектов, отображаемый мной из мангуста. Каждый объект в массиве объектов имеет атрибут emoji, который фильтруется из массива allEmojis. (Ниже массив объектов)Фильтрация массива объектов из массива строк

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 в массиве объектов с массивом строки. Также предполагая, что это действительно сработало, оно не фильтруется на основе объектов, имеющих указанный идентификатор. Я надеялся, что смогу найти наиболее эффективный способ сделать это.

+0

Можете ли вы описать конкретно и на словах то, что вы пытаетесь достичь? Вы хотите отфильтровать всеEmoji? содержит ли другой массив этот эможи? Что они должны делать с этим? – pvg

+0

У меня есть массив, содержащий все эмоции. У меня есть массив объектов с каждым элементом, имеющим id и emoji. На изображении выше вы можете видеть, что у Джона есть фламинго и утка. Поэтому мне нужен массив emojis для John, который фильтрует все эмоции от johns emojis. Итак, все эмоции = [собака, тукан, фламинго, лев, тигр, утка, слон, зебра], emojis Джона = [фламинго, утка]. Таким образом, фильтр должен быть [собака, тукан, лев, тигр, слон, зебра]. То же самое относится к элементам, которые имеют йойоо. Мне нужен массив для yoyoyo, который фильтрует все emojis от emojis, который имеет yoyoyo. – 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, то вы можете фильтровать пересечение 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 

, который, вероятно, имеет более высокую производительность.