2017-07-28 72 views
0

我想过滤2个具有相似对象的数组。JS单线过滤器从2个阵列类似的对象

genreFiltered返回正确

sortFiltrered应当与5个对象像recommended阵列返回阿雷。
相反,它返回空。

有人可以现场我在做什么错我的方式我在过滤2阵列sortFiltrered

let genreFiltered = genreValue !== 15 ? games.filter((game) => game.genre_id === genreValue) : games 

let sortFiltrered= sortValue !== 1 ? genreFiltered.filter((game) => game.game_id === recommended.filter((rec) => rec.game_id)) : genreFiltered 

console.log('recommended', recommended) 
console.log('genreFiltered', genreFiltered) 
console.log('sortFiltrered', sortFiltrered) 

输出:

enter image description here

+0

您正试图将game.game_id与数组进行比较,以便过滤器函数返回false。因此找不到匹配并返回空数组。 – Jay

+0

我相信recommended.filter((rec)=> rec.game_id)返回一个数组,你想检查它对字符串 –

+0

我现在明白了。谢谢。 –

回答

2

它不能等于......你应该得到至少第一要素。

let ageFiltrered = sortValue !== 1 ? genreFiltered.filter((game) => game.game_id === recommended.filter((rec) => rec.game_id)[0].game_id) 

该代码将过滤所有具有game_id的代码,并且它将检查第一次出现。

如果你想不仅检查你可以做这样的事情的第一次出现(这只是一个简单的例子,但你可以在你的情况下使用):

var arr = [{w:'2'}, {w:'3'}, {w:'12'}, {w:'456'}] 
arr.filter(w => w.w.indexOf(arr.filter(w => w.w === '22').map(w => w.w).join()) !== -1) 
2

好,在这部分

genreFiltered.filter((game) => game.game_id === recommended.filter((rec) => rec.game_id)) 

game.game_id似乎是一个整数,结果是recommended.filter((rec)是一个数组。所以,他们不是===

也许你可以使用==如果你知道recommended.filter((rec) => {...})的结果是一个有1个元素的数组。然后它将被铸造成像'1'这样的字符串,然后与==运算符一起被输出到一个整数,这样1 == [1]会给你true