如何在 JavaScript 中查找另一个对象中具有属性的对象

2023-12-10

我有一个包含所有用户的对象,如下所示:var users = {user1:{}, user2:{}},并且每个用户都有一个 isPlaying 属性。如何获取 isPlaying 为 false 的所有用户?


你应该使用Object.keys, Array.prototype.filter and Array.prototype.map:

// This will turn users object properties into a string array
// of user names
var userNames = Object.keys(users);

// #1 You need to filter which users aren't playing. So, you
// filter accessing users object by user name and you check that
// user.isPlaying is false
//
// #2 Using Array.prototype.map, you turn user names into user objects
// by projecting each user name into the user object!
var usersNotPlaying = userNames.filter(function(userName) { 
   return !users[userName].isPlaying; 
}).map(function(userName) {
   return users[userName];
});

如果使用 ECMA-Script 6 完成,您可以使用箭头函数:

// Compact and nicer!
var usersNotPlaying = Object.keys(users)
                       .filter(userName => users[userName].isPlaying)
                       .map(userName => users[userName]);

Using Array.prototype.reduce

正如@RobG 所指出的,您还可以使用Array.prototype.reduce.

虽然我不想重叠他的新答案和自己的答案,但我相信reduce如果它返回用户对象数组,则该方法更实用不玩.

基本上,如果您返回一个对象而不是数组,问题是另一个调用者(即调用执行所谓的函数的函数)reduce)可能需要致电reduce再次执行新操作,而数组已经准备好流畅地调用其他操作Array.prototype功能类似于map, filter, forEach...

代码看起来像这样:

// #1 We turn user properties into an array of property names
// #2 Then we call "reduce" on the user property name array. Reduce
//    takes a callback that will be called for every array item and it receives
//    the array reference given as second parameter of "reduce" after 
//    the callback.
// #3 If the user is not playing, we add the user object to the resulting array
// #4 Finally, "reduce" returns the array that was passed as second argument
//    and contains user objects not playing ;)
var usersNotPlaying = Object.keys(users).reduce(function (result, userName) {
    if (!users[userName].isPlaying) 
        result.push(users[userName]);
    return result;
}, []); // <-- [] is the new array which will accumulate each user not playing

明确使用Array.prototype.reduce集中两者map and filter在单个循环中以及在大型数组中,减少应该优于“过滤器+映射”方法,因为循环大型数组两次以过滤不玩的用户并再次循环以将它们再次映射到对象中可能会很重......

总结:我还是会用过滤器+地图 over reduce当我们谈论几个项目时,因为有时可读性/生产力比优化更重要,在我们的例子中,似乎过滤器+地图与reduce相比,该方法需要更少的解释(自记录代码!)。

无论如何,可读性/生产力取决于实际编码的人......

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 JavaScript 中查找另一个对象中具有属性的对象 的相关文章

随机推荐

  • 在 ArangoDB 中使用相同边定义的多个图

    我正在评估 ArangoDB 并尝试创建多个可能包含相同节点集合和相同边集合的图 即使每个图可能包含不同的物理文档和边 然而 当尝试创建一个使用已在另一个图中使用的边集合的图时 我得到 1921 边缘集合已在边缘定义中使用 error 当图
  • 当依赖包所有者从 github 中删除存储库时,Golang 项目会发生什么?

    我是 Golang 的新手 我来自 NodeJS 我有点关心依赖管理的工作原理 在 Node 中 您可以放心 NPM 依赖项永远不会停止可用 因为它托管在 NPM com 上 并且不允许所有者删除它们 然而 在 Github 中 所有者几乎
  • 如何正确关闭 Bot::BasicBot 机器人(基于 POE::Component::IRC)?

    这是一个示例脚本 当我按下 Ctrl C 时 机器人退出 IRC 但在一段时间后又重新连接 如何正确关闭机器人 usr bin perl package main my bot Perlbot gt new server gt irc da
  • 每行放置两个 div

    所以我有 X 个 div 我想将 2 个 div 放在一排 彼此相邻 如果屏幕尺寸宽度低于 n px 则每行应有 1 个 div 目前我有这个 container display flex box width 50px background
  • PHP如何解析对象sdtClass [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 当我运行 SOAP 客户端时 我收到以下响应 我怎样才
  • 如何在单个文件中恢复旧提交的更改

    如何恢复 删除在旧的多文件提交中所做的更改 但仅在单个文件中进行 IE 就像是 git revert
  • C++快速排序算法

    我不想复制 qsort 算法 我正在练习编写 qsort 这就是我想到的 我对我的代码的哪一部分是错误的感兴趣 请不要告诉我这是家庭作业 因为我可以使用下面链接中的代码 参考 http xoax net comp sci algorithm
  • 使用python中的循环查找第二小的数字[重复]

    这个问题在这里已经有答案了 我想知道如何找到第二小的数字来自具有 def 函数的用户输入列表 还 WITHOUT使用任何排序函数 导入的模块以及 min 和 max 函数 如何仅使用循环和关系运算符来查找数字 这是我的以下代码 到目前为止我
  • 使用 Google Api 获取文档列表并下载它们?

    您好 我正在使用 android 的 picasa 示例并对其进行修改 但我没有收到任何文档列表 请帮助我发布我修改后的类 其余部分与 picasa 示例中的相同 请帮助 我得到了400 bad request in executeRefr
  • 无法在 Windows 7 上将 PB 10.5 另存为 PDF

    我有一个内置于 10 5 的应用程序 能够在 Windows XP 上使用 SaveAs 成功创建 PDF 当我迁移到 Windows 7 32 位 时 它失败并返回 1 和零长度文件 我已经尝试了我能想到的一切 我尝试了多个版本的 Gho
  • 如何可视化 Neo4j 图 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我想在我的 JAVA 应用程序中可视化 Neo4j 嵌入图 我读过 Max De Marzi 的图形可视化博客 但我在 JAVA 中找不到任何内容
  • PHP 中 POST 方法的问题

    问题 表单提交后未定义的 POST 变量 已完成的研究和故障排除 阅读此处的大量问题 几乎所有问题都与表单字段上没有姓名标签有关 我的所有字段都有标签和 ID 配置我的 PHP ini 将 HTTP RAW POST DATA 设置为 1
  • 在 PHP 服务器上签署 .mobileconfig

    谁能告诉我如何使用openssl smime sign signer cert pem inkey key pem certfile ca bundle pem nodetach outform der in profile uns mob
  • Visual Studio 2012 数据库项目中未解决的引用

    有没有办法从我的数据库项目中引用另一个数据库而不直接引用它 例如 我希望能够写出这样的内容 CREATE VIEW View1 AS SELECT X FROM OtherDB dbo Table1 最好的选择是向您的项目添加数据库引用 对
  • 黑莓 - 如何在手机启动时启动我自己的服务?

    我想在手机启动时启动自己的服务实现 如何实现 您只需在黑莓JDE中的项目属性中设置 系统模块 和 自动启动 选项即可 这将在手机启动时启动您的应用程序
  • 从 Facebook 重定向到 iOS 应用程序 - 深层链接

    我无法从 Facebook 帖子重定向到我的 iOS 应用程序 当我点击该帖子时 它会作为网页打开 不知何故 不识别 iOS 标签 也不重定向到应用程序 不确定它是 ios 应用程序还是 html 内容或其他问题 Myapppp plist
  • Swift Objective-C 运行时类命名

    我注意到 Swift 类在 Objective C 运行时被重命名 所以如果我有一个名为 swift 的课程ViewController我的应用程序的名称是TestRuntime当我表演时object getClass self self
  • JavaScript 中用于 URL 捕获的正则表达式

    我不太擅长 Javascript 中的正则表达式 有谁知道捕获 URL 最后部分的有效方法 我有以下网址 http localhost 3000 developers 568d3c3c82eea6e6fb47c236 我需要做的就是捕获开发
  • URL 方案附件 Microsoft Outlook 应用程序

    我正在尝试制作一个应用程序来生成文件并填充所有电子邮件字段 以便用户只需输入正文即可 我还为用户提供了在本机 iOS 电子邮件应用程序和 Microsoft Outlook 应用程序 如果已安装 之间进行选择的可能性 当我实现此操作以准备要
  • 如何在 JavaScript 中查找另一个对象中具有属性的对象

    我有一个包含所有用户的对象 如下所示 var users user1 user2 并且每个用户都有一个 isPlaying 属性 如何获取 isPlaying 为 false 的所有用户 你应该使用Object keys Array pro