首页 > 解决方案 > 想不通这个功能

问题描述

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 

标签: javascriptfunctionfilter

解决方案


  1. userHasVisitedParkOnWishlist(users, "dwayne.m55", "karah.branch3")-> 这应该是false,不是true
  2. 您只需检查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)


推荐阅读