【问题标题】:Get the first key name of a JavaScript object [duplicate]获取 JavaScript 对象的第一个键名 [重复]
【发布时间】:2011-03-18 22:17:21
【问题描述】:

假设我们有以下 JavaScript 对象:

ahash = {"one": [1,2,3], "two": [4,5,6]}

是否有返回给定对象的第一个键名的函数?

从上面的示例中,我想通过该函数获得one

【问题讨论】:

  • 你要的是对象的第一个键的值还是第一个键名?我很困惑。
  • let [first] = Object.keys(ahash)

标签: javascript


【解决方案1】:

您可以根据数组位置查询对象的内容。
例如:

 let obj = {plainKey: 'plain value'};

 let firstKey = Object.keys(obj)[0]; // "plainKey"
 let firstValue = Object.values(obj)[0]; // "plain value"

 /* or */

 let [key, value] = Object.entries(obj)[0]; // ["plainKey", "plain value"]

 console.log(key); // "plainKey"
 console.log(value); // "plain value"

【讨论】:

  • 好像没有回答问题
  • 使用明确构造的对象(例如所用问题)的示例将提供更好的答案。这个答案基本上是正确的,但它需要对 Javascript 的了解太细,才能轻松破译其含义。
  • 感谢评论,改成更易懂的代码。
【解决方案2】:

出于防御性编码的原因,我使用Lodash

特别是,在某些情况下,我不知道我要为其获取密钥的对象中是否会有任何属性。

使用Lodash 的“完全防御”方法将同时使用keysget

const firstKey = _.get(_.keys(ahash), 0);

【讨论】:

    【解决方案3】:

    在 Javascript 中,您可以执行以下操作:

    Object.keys(ahash)[0];
    

    【讨论】:

    • 也适用于浏览器
    • 这是一段病态的代码。我原以为必须用一个愚蠢的 dict 键把所有东西都弄得一团糟:
    • 我想指出for (key in dict) 的执行速度可能明显更快,O(1) 而不是 O(n)。这一点都不傻。
    • 对未来的我...请注意,Object 上还有一个“值”方法,即 Object.value,如果您想要第一个键的值
    • @engineerDave,这就是未来的你。我们已经更改了我们的 stackOverflow 帐户句柄,并且我们通过发明时间旅行赚了一大笔钱,但这不是重点。我只是想说,“谢谢”,这个小便条帮助了我。
    【解决方案4】:

    如果你决定使用 Underscore.js 你最好这样做

    _.values(ahash)[0]
    

    获取价值,或

    _.keys(ahash)[0]
    

    获取密钥。

    【讨论】:

      【解决方案5】:

      使用 Underscore.js,你可以做到

      _.find( {"one": [1,2,3], "two": [4,5,6]} )
      

      它将返回 [1,2,3]

      【讨论】:

      • lodash 也是如此 :)
      • 还有一个 findKey 方法返回键(而不是值)
      【解决方案6】:

      您可以同时将元素放入数组和散列中。

      var value = [1,2,3];
      ahash = {"one": value};
      array.push(value);
      

      array 可用于按顺序获取值,而 hash 可用于通过键获取值。当您删除和添加元素时,请保持随身携带。

      【讨论】:

        【解决方案7】:

        试试这个:

        for (var firstKey in ahash) break;
        
        alert(firstKey);  // 'one'
        

        【讨论】:

        • 注意必须使用var关键字; letconst 是不够的。
        • 没有。请不要这样做。这可能是正确的,但它是一个完全老套且令人困惑的解决方案。
        【解决方案8】:

        哈希中没有“第一个”键这样的东西(Javascript 称它们为对象)。它们基本上是无序的。你的意思是只选择任何一个键:

        for (var k in ahash) {
            break
        }
        
        // k is a key in ahash.
        

        【讨论】:

        • 应该检查 obj.hasOwnProperty(prop) 是否我也会添加
        • 以及如何获得其他的?
        • 我认为这是不推荐的解决方案。这使用了名为“变量提升”的不良功能。并且 ES6 建议不要在 for 循环中使用 'var'
        • EMCA 脚本规范使字典有序。它们是“有序字典”。枚举的顺序与字典项的添加顺序相同。这很有用。例如,在 Python 中,OrderedDictionary 是一个特定的类,其中 Dictionary 将在枚举时返回字典中键的不确定排序
        • @JayDayZee ECMAScript 没有一个叫做“字典”的东西,对吧?这个答案(stackoverflow.com/a/5525820/14343)似乎表明对象是无序的,而地图是有序的。这符合你的理解吗?
        猜你喜欢
        • 2019-07-25
        • 1970-01-01
        • 2018-03-23
        • 2023-03-20
        • 1970-01-01
        • 2011-11-24
        • 1970-01-01
        • 2020-02-07
        相关资源
        最近更新 更多