JS one-liner过滤来自2个数组的类似对象

时间:2017-07-28 10:41:33

标签: javascript ecmascript-6

我正在尝试过滤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)

输出:

enter image description here

2 个答案:

答案 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