javascript - 想不通这个功能
问题描述
userHasVisitedParkOnWishlist
此函数接受用户列表和两个用户名。如果第一个用户访问了第二个用户的愿望清单所代表的任何公园,则返回 true。否则,返回假。
const users = {
"karah.branch3": {
visited: [1],
wishlist: [4, 6],
},
"dwayne.m55": {
visited: [2, 5, 1],
wishlist: [],
},
thiagostrong1: {
visited: [5],
wishlist: [6, 3, 2],
},
"don.kim1990": {
visited: [2, 6],
wishlist: [1],
},
};
function userHasVisitedParkOnWishlist(users, userA, userB) {
const result = Object.keys(users).filter(wish => wish.visited === userA);
return result.some(wish => { userA.visited > userB.visited});
}
// Example calls:
userHasVisitedParkOnWishlist(users, "dwayne.m55", "karah.branch3"); //> true
userHasVisitedParkOnWishlist(users, "karah.branch3", "dwayne.m55"); //> false
解决方案
userHasVisitedParkOnWishlist(users, "dwayne.m55", "karah.branch3")
-> 这应该是false
,不是true
- 您只需检查
userB
's wishlist是否includes
至少有userA
'visited list 的一个元素
const users = {
"karah.branch3": {
visited: [1],
wishlist: [4, 6],
},
"dwayne.m55": {
visited: [2, 5, 1],
wishlist: [],
},
thiagostrong1: {
visited: [5],
wishlist: [6, 3, 2],
},
"don.kim1990": {
visited: [2, 6],
wishlist: [1],
},
};
function userHasVisitedParkOnWishlist(users, userA, userB) {
return users[userA]["visited"].some(v => users[userB]["wishlist"].includes(v))
}
// Example calls:
const a = userHasVisitedParkOnWishlist(users, "dwayne.m55", "karah.branch3"); //> true -> NO THIS SHOULD BE FALSE!!!
const b = userHasVisitedParkOnWishlist(users, "karah.branch3", "dwayne.m55"); //> false
const c = userHasVisitedParkOnWishlist(users, "dwayne.m55", "don.kim1990"); //> true
console.log(a, b, c)
如果您想让它看起来更经过深思熟虑,那么您可以使用 HOF(高阶函数)方法:
const users = {
"karah.branch3": {
visited: [1],
wishlist: [4, 6],
},
"dwayne.m55": {
visited: [2, 5, 1],
wishlist: [],
},
thiagostrong1: {
visited: [5],
wishlist: [6, 3, 2],
},
"don.kim1990": {
visited: [2, 6],
wishlist: [1],
},
};
// HOF - returns a function (that expects two arguments)
const userHasVisitedParkOnWishlist = (users) => {
return (userA, userB) => {
return users[userA]["visited"].some(v => users[userB]["wishlist"].includes(v))
}
}
// set the HOF with the users argument
const hasVisitedParks = userHasVisitedParkOnWishlist(users)
// Now you only have to call the function with 2 arguments -
// the users object is "already accounted for"
const a = hasVisitedParks("dwayne.m55", "karah.branch3"); //> false
const b = hasVisitedParks("karah.branch3", "dwayne.m55"); //> false
const c = hasVisitedParks("dwayne.m55", "don.kim1990"); //> true
console.log(a, b, c)
推荐阅读
- python - 未找到自定义 python 包
- php - 将配置变量传递给 Eloquent 模型
- python - function to determine the frequency of a sinusoid
- swift - 使用 PDFKit 提取 PDF 亮点
- ruby-on-rails - 如何从 Rails 中的文本装置生成 db/seed.rb 文件
- amazon-web-services - AWS 策略基于服务限制权限
- javascript - 使用 for 循环在 Class Constructor 中创建 x 数量的新对象,然后在 JavaScript 中修改它们
- r - 有没有办法在 R Shiny 中*输出*星级?
- java - Java 以什么顺序评估这个特定的表达式: System.out.println("g."+ " big " + 2*3);
- r - 如何融化数据框