如何使用 for 循环获取 javascript-value 对象中的最后一项?

2024-01-06

var obj = { 'a' : 'apple', 'b' : 'banana', 'c' : 'carrot' }

如果我做一个

for (var key in obj) {
  console.log( key + ' has a value ' + obj[key] );
}

它将查看所​​有值obj。如果我有一个更大的对象,我如何知道我是否处于该对象的最后一次迭代中for loop?

我意识到键值对并不是真正按顺序组织的,但我需要在这个循环的最后一次迭代中完成一些事情,但不知道如何完成。


不要使用for (key in obj),它将迭代所有可枚举属性,包括原型属性,并可能导致令人惊讶的可怕事情。现代 JS 有一个特殊的函数,可以仅从对象中获取相关的键,使用对象.keys(...) https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys,所以如果你使用var keys = Object.keys(obj)要将键列表作为数组获取,您可以对其进行迭代:

// blind iteration
Object.keys(obj).forEach(function(key, i) {
  var value = obj[key];
  // do what you need to here, with index i as position information.
  // Note that you cannot break out of this iteration, although you
  // can of course use ".some()" rather than ".forEach()" for that.
});

// indexed iteration
for(var keys = Object.keys(obj), i = 0, end = keys.length; i < end; i++) {
  var key = keys[i], value = obj[key];
  // do what you need to here, with index i as position information,
  // using "break" if you need to cut the iteration short.
});

或立即选择其最后一个元素

var keys = Object.keys(obj);
var last = keys[keys.length-1];

或使用slice https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/slice:

var keys = Object.keys(obj);
var last = keys.slice(-1)[0];

或使用shift https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/shift(但这是一个破坏性的操作,所以我们不会缓存键,因为移位将其变成“不再是所有键”):

var last = Object.keys(obj).shift();

2021年编辑

现在还有对象.条目 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/entries函数,它可以一次性获取键/值对:

Object.entries(obj).forEach(([key, value]) => {
  console.log(`key "${key}" points to:`, value):
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 for 循环获取 javascript-value 对象中的最后一项? 的相关文章

随机推荐

  • artifact:install 推送 super-pom 而不是我定义的 POM

    我在 Ant 文件中定义了一个 POM 构建工作正常 从存储库中提取正确的工件 但是 工件 安装任务推送到 super pom 而不是我指定的 pom 我使用以下 POM 文件
  • Olive (Mono) 如何实现 (W)PF?

    在阅读一本维基百科上有关 Mono 的文章 http en wikipedia org wiki Mono 28software 29 我发现有一个 Mono 子 副项目叫做Olive http mono wikia com wiki Ol
  • 使用正则表达式解析多行日志条目

    我正在尝试使用以下正则表达式解析 C 应用程序中的日志条目 0 9 4 0 9 2 2 3 1 对于格式如下的日志 日期 某种格式 level 应用程序名称 信息 哪里 我认为 匹配行的开头 启用 gm在正则表达式101上 0 9 4 0
  • 提交 JTA 事务后可以回滚它吗?

    我有一个提交的 JTA 事务 提交后可以回滚吗 如果是 怎么办 我有以下情况 我有一个更新了 3 个 DB 的后端层 我已经使用了 JTA 用户交易 如果任何数据库中的更新失败 则使用 utx rollback 回滚对 3 个数据库的所有更
  • 如果用纯 C++ 表示静态?

    简而言之问题 怎样才能实现static if在 c 11 中提出的功能 用普通的 c 历史和原始问题 最近我遇到了这样一个问题 我需要上课Sender具有类似的界面 class Sender void sendMessage void se
  • 证明强可能素数的素性

    使用米勒 拉宾测试的概率版本 我生成了中大 200 300 位 可能素数的列表 但可能还不够好 我需要know这些数字是素数 是否有一个库 最好是用 Python 包装或可包装 可以实现更有效的素性证明算法之一 或者 有谁知道我在哪里可以找
  • 如何从 PDO 失败“错误!:SQLSTATE[HY093]:无效的参数号:参数未定义”中获取更多信息?

    每隔一段时间 我就会在 PDO 中遇到如下错误 错误 SQLSTATE HY093 参数号无效 参数未定义 有没有办法获得更具体的错误 例如行号 文件名 缺少的参数等 而不是模糊的消息 首先 确保 PDO 设置为在错误时抛出异常 pdo g
  • 如何从另一个平面/简单配置单元表加载带有map[structs]的配置单元表

    我在 hive 中有 2 个表 其中有 Order 和 Order Detail 具有 1 n 关系并在 order id 上连接 我试图利用 hive 复杂数据类型 map struct 将其加载到单个表中 假设 ORDER 有以下数据
  • Eclipse CDT 新项目模板 - 如何添加库

    在 Eclipse CDT Indigo 中 有一个新功能允许您将新的 C C 模板项目添加到新项目向导中 我已经弄清楚如何在一定程度上成功地做到这一点 我可以创建一个仅依赖于简单源文件的基本项目 但现在我想创建一个 CPPUnit 项目
  • Python、Chrome 任务管理器 - 以编程方式访问 Chrome 任务管理器的文本而不使用 CHROMIUM

    因此 由于许多人都遇到过 Chrome 的内存使用量可能会让人衰弱的情况 所以我想以编程方式访问 Chrome 的任务管理器 或类似的东西 显示选项卡 它们的 PID 和子帧 如果可能 这样我就可以创建一个脚本来杀死它们 经过大量阅读 很多
  • PetaPoco 在带有触发器的表上插入失败

    我们使用 PetaPoco 作为 SQL 2008 数据库的数据访问工具 当尝试在附加了触发器的表上插入 更新行时 我们遇到了问题 我们正在使用 PetaPoco 的 db Save object 显示的错误是 如果 DML 语句包含 OU
  • 关于 C# 语言规范中隐式转换的问题

    第 6 1 节 隐式转换定义一个身份转换 thusly 身份转换从任何类型转换为相同类型 这种转换的存在使得已经具有所需类型的实体可以说可以转换为该类型 现在 这些句子的目的是什么 在第 6 1 6 节隐式引用转换中 隐式引用转换为 Fro
  • 生成器函数可以用来做什么?

    我开始学习Python 并且遇到了生成器函数 这些函数中包含yield 语句 我想知道这些函数真正擅长解决什么类型的问题 生成器为您提供惰性评估 您可以通过迭代来使用它们 可以显式地使用 for 也可以通过将其传递给任何迭代的函数或构造来隐
  • 为什么我的 OpenMP 实现比单线程实现慢?

    我正在学习 OpenMP 并发性 并尝试了一些现有的代码 在此代码中 我尝试使所有 for 循环并行 然而 这似乎使程序慢得多 至少慢 10 倍 甚至比单线程版本慢得多 这是代码 http pastebin com zyLzuWU2 htt
  • JavaFX TitledPane 查找(.title)返回 null

    我是 Java FX 新手 正在创建一个有趣的应用程序 我正在尝试添加一个TitledPane动态地 并且在尝试查找标题时遇到空指针异常TitledPane大约70 的时间 我尝试为我的问题创建一个简单的演示 但无法在我的应用程序之外重现该
  • 如何迭代四叉树/八叉树

    我很难掌握如何迭代八叉树或四叉树 这可能是因为我没有经历过不同的迭代神话 但假设我生成了一棵四叉树 其中包含 float x y z 双字颜色 现在 我们还可以说这个节点一次只能产生 4 个子节点 并且这些子节点都可以产生 4 个子节点 等
  • 服务器未提供 charset=utf-8 时 Postman utf-8 编码问题

    Spring 已弃用 APPLICATION JSON UTF8 application json charset UTF 8 注释正如他们所说 A String equivalent of link MediaType APPLICATI
  • 是否可以将 UITableView 部分索引中的单词换行?

    我想将单词包装在 UItableView 右侧显示的部分索引中 问题是 如果单词长度增加 部分索引宽度也会增加 并且表视图单元格内容视图大小减小 而且我不想显示部分索引数组对象的子字符串 因为我想在部分 i 中显示整个单词必须把它包裹起来
  • 在 javascript 中实现 document.getElementById

    我正在尝试实现原生document getElementById在 JavaScript 中 我已经实施了document getElementsByClassName在 JavaScript 中 function getElementsB
  • 如何使用 for 循环获取 javascript-value 对象中的最后一项?

    var obj a apple b banana c carrot 如果我做一个 for var key in obj console log key has a value obj key 它将查看所 有值obj 如果我有一个更大的对象