我正在尝试过滤2个具有相似对象的数组。
genreFiltered
正确返回
sortFiltrered
应该返回一个包含5个对象的aray,例如recommended
数组
相反,它返回空。
有人可以通过sortFiltrered
过滤2个阵列的方式发现我做错了吗?
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)
输出:
答案 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)
答案 1 :(得分:2)
好吧,在这部分
genreFiltered.filter((game) => game.game_id === recommended.filter((rec) => rec.game_id))
game.game_id
似乎是一个整数,recommended.filter((rec)
的结果是一个数组。所以,它们不是===
。
如果你知道==
的结果是一个包含1个元素的数组,那么你可以使用recommended.filter((rec) => {...})
。然后它将被转换为类似'1'的字符串,然后使用==
运算符将其转换为整数,以便1 == [1]
为您提供true
。