2016-12-25 94 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 

這可能具有更好的性能。