【问题标题】:How do I get a key value of each object in a javascript object? [duplicate]如何获取 javascript 对象中每个对象的键值? [复制]
【发布时间】:2014-06-11 21:39:11
【问题描述】:

如果我在 JS 中有一个对象,如下例所示:

var files = [
  {
    "name":"test.png",
    "type":"image/png",
    "size":3536
  },
  {
    "name":"test.png",
    "type":"image/png",
    "size":3536
  },
  {
    "name":"test.png",
    "type":"image/png",
    "size":3536
  }
];

列出每个对象的名称最有效的方法是什么?

【问题讨论】:

  • 一些库为此提供了pluck(files, "name") 功能
  • 函数 pluck(x) { 返回 x[this]; }; var names = files.map(pluck, "name"), types=files.map(pluck, "type");
  • stackoverflow.com/q/20067386/218196,或其中任何stackoverflow.com/…。随意重新打开并关闭更合适的副本。

标签: javascript arrays object


【解决方案1】:

带有for 循环:

for (var i = 0; i < files.length; i++) {
    console.log(files[i].name);
}

【讨论】:

    【解决方案2】:

    可能不是最有效的,但最短且最易读的 (IMO):

    var names = files.map(function (file) { return file.name; });
    

    https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map

    【讨论】:

      【解决方案3】:
      for(var i=0,l=files.length;i<l;i++) {
          console.log(files[i].name);
      }
      

      【讨论】:

      • 为什么有不必要的额外变量?
      • 如果您真正查看链接到的问题中提供的测试数据,您会发现在现代浏览器中这不是最快的解决方案。即便如此,这也是过早优化的另一个例子。
      • chrome v36 上的缓存长度似乎与您的评论相矛盾。 blogs.oracle.com/greimer/resource/loop-test.html
      • 阅读您链接的同一问题中链接的 jsperf。来自不同系统的大量不同样本(与您的单一测试相反)几乎都表明while 解决方案是最快的。
      【解决方案4】:

      一个简单的for循环应该是最好的:

      for (var i = 0; i < files.length; i++) {
          console.log(files[i].name);
      }
      

      要将上述内容作为键值来执行,您将创建一个对象而不是数组:

      var files = {
          "test1.png":
          {
              "type":"image/png",
              "size":3536
          },
          "test2.png":
          {
              "type":"image/png",
              "size":3536
          },
          "test3.png":
          {
              "type":"image/png",
              "size":3536
          }
      };
      

      然后你会像这样遍历它们:

      for (var key in files) {
          console.log("File name: " + key);
          console.log("File data: " + files[key]);
      }
      

      【讨论】:

        猜你喜欢
        • 2019-08-07
        • 2012-07-02
        • 2015-11-05
        • 1970-01-01
        • 2013-05-11
        • 2021-12-25
        • 1970-01-01
        • 1970-01-01
        • 2019-07-25
        相关资源
        最近更新 更多