You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

函数编程难题求助:查找指定用户的好友所属客户姓名列表

问题描述

现有一个包含客户对象的数组,每个客户对象包含friends数组,每个好友对象有name等属性。需求是:给定该数组和一个客户姓名,编写函数判断该客户是否在其他客户的好友列表中,若是则返回这些客户的姓名数组。

示例:客户"Olga Newton"存在于Regina和Jay的好友列表中,预期返回['Regina', 'Jay']。

尝试使用filter函数处理,但因friends是嵌套对象数组,未能成功——返回结果要么是完整客户对象数组,要么是空数组,求问问题出在哪里?

附客户数组代码:

var customers = [{
name: "Olga Newton",
age: 43,
balance: "$3,400",
friends: [{
    id: 0,
    name: "Justice Lara"
}, {
    id: 1,
    name: "Duke Patrick"
}, {
    id: 2,
    name: "Herring Hull"
}, {
    id: 3,
    name: "Johnnie Berg"
}]
}, {
name: "Regina",
age: 53,
balance: "$4,000",
    friends: [{
    id: 0,
    name: "Cheryl Kent"
}, {
    id: 1,
    name: "Cynthia Wells"
}, {
    id: 2,
    name: "Gutierrez Waters"
}, {
    id: 3,
    name: "Olga Newton"
}]
}, {
name: "Jay",
age: 28,
balance: "$3,000",
friends: [{
    id: 0,
    name: "Cross Barnett"
}, {
    id: 1,
    name: "Raquel Haney"
}, {
    id: 2,
    name: "Olga Newton"
}, {
    id: 3,
    name: "Shelly Walton"
}]
}];
问题原因与解决方法

问题出在哪?

你用filter没成功的核心问题是:没正确处理嵌套的friends数组判断。要么直接把customer.friends当作判断条件(数组在布尔逻辑里是真,所以返回所有客户),要么错误地直接访问customer.friends.name——friends是数组,根本没有name属性,所以返回空数组。

怎么解决?

要实现需求,得把filter和some(或find)结合起来用:

  • 先用filter遍历客户数组,只留下好友列表里有目标姓名的客户;
  • 对每个客户的friends数组,用some判断有没有好友的name和目标姓名匹配(some找到第一个匹配项就停,效率更高);
  • 最后用map把筛选出的客户对象转成姓名数组。

完整代码

function findCustomersWhoHaveFriend(customers, targetName) {
  return customers
    .filter(customer => {
      // 排除目标客户自己(不需要排除可删除此行)
      if (customer.name === targetName) return false;
      // 判断当前客户的好友列表是否包含目标姓名
      return customer.friends.some(friend => friend.name === targetName);
    })
    .map(customer => customer.name); // 提取客户姓名
}

// 测试示例
console.log(findCustomersWhoHaveFriend(customers, "Olga Newton")); // 输出: ['Regina', 'Jay']

补充说明

  • 如果允许客户自己出现在自己的好友列表中,删掉filter里的if (customer.name === targetName) return false;即可;
  • 也可以用find替代some,但some更适合做存在性判断,找到匹配项后立即停止遍历,性能更优。

内容的提问来源于stack exchange,提问作者GloriousKaboom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 05:15:35