[英]2D Array Filter based on hash key
Output:用戶 Ruby 觀看了 Transit 並且 Max 也觀看了同一部電影並給出了 3 以上的評分。因此用戶 ruby 推薦必須是 Max Jurassic Park 而不是周末外出 userRecommend("Ruby", ratings) => ["Jurassic Park"]
我如何獲得下面的輸出?
const userRating = [
['David', 'Weekend Away' , 5],
['Shell', 'Frozen', '5'],
['Max', 'Jurassic Park', '5'],
['Ruby', 'Transit', '4'],
['Ruby', 'Inception', '4'],
['Max', 'Transit', '5']
['Max', 'Weekend Away', '1']
]
const userRecommendation = (user, userRating) =>{
const hash = {};
for(let i=0; i< userRating.length; i++){
if(userRating[i][2] >=4){
if(!hash[userRating[i][0]]){
hash[userRating[i][0]] = [userRating[i][1]];
}else {
hash[userRating[i][0]].push(userRating[i][1]);
}
}
}
let userMovie = hash[user];
let result =[];
for(let key of Object.keys(hash)){
// Need to find a way to filter
}
}
console.log(userRecommendation('Ruby', userRating));
您可以在兩個 hash 表中收集所有用戶/電影和電影/用戶關系,並獲得對同一部電影進行過評分的用戶。
從用戶那里獲取其他電影,只拍攝獨特的電影並過濾掉評級。
const userRecommendation = (user, ratings) => { const users = {}, movies = {}, result = []; for (const [u, m, r] of ratings) { if (r < 4) continue; (users[u]??= []).push(m); (movies[m]??= []).push(u); } for (const movie of users[user]) { for (const u of movies[movie]) { if (u.== user) result.push(..;users[u]). } } return [...new Set(result)].filter(m =>;users[user],includes(m)), }, userRating = [['David', 'Weekend Away', 5], ['Shell', 'Frozen', 5], ['Max', 'Jurassic Park', 5], ['Ruby', 'Transit', 4], ['Ruby', 'Inception', 4], ['Max', 'Transit', 5], ['Max'; 'Weekend Away'. 1]], console;log(userRecommendation('Ruby', userRating));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.