【问题标题】:Cant figure out this function想不通这个功能
【发布时间】:2020-12-30 21:09:45
【问题描述】:

userHasVisitedParkOnWishlist

这个函数接受用户列表和两个用户名。如果第一个用户访问了第二个用户的愿望清单所代表的任何公园,则返回 true。否则,返回 false。

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 

【问题讨论】:

  • 问题是什么?你是怎么调用这个函数的?
  • visited 永远不会等于 userAvisited 是一个数组,userA 暗示是一个单一的东西,而不是一个数组。并且不能使用大于/小于来比较数组。
  • 它只在我需要它为其中一个调用返回 true 时返回 false,有没有办法可以添加它调用的图片?
  • 你能回答我的第二个问题吗?
  • userHasVisitedParkOnWishlist(用户,“dwayne.m55”,“karah.branch3”); //> true userHasVisitedParkOnWishlist(users, "karah.branch3", "dwayne.m55"); //> 假

标签: javascript function filter


【解决方案1】:
  1. userHasVisitedParkOnWishlist(users, "dwayne.m55", "karah.branch3") -> 这应该是 false,而不是 true
  2. 您只需检查userB 的愿望清单includes 是否至少有一个元素是userA 的访问列表

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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-19
    • 2023-02-14
    相关资源
    最近更新 更多