【问题标题】:Return all the values of an array in json返回json中数组的所有值
【发布时间】:2014-08-12 05:55:03
【问题描述】:

我有一个包含我博客所有帖子的 json,我想返回“tags”数组的所有值。因此,请参阅下面的 json 示例:

"posts":[
  {
     "id":"89319077059",
     "title":"Post Title 01",
     "tags":[
        "Politcs",
        "Science",
     ]
  },
  {
     "id":"89318918989",
     "title":"Post Title 02",
     "tags":[
        "Football",
        "Soccer",
     ]
  },
]

所以,我需要在循环中获取唯一的标签值,例如:

for (var i = 0; i < posts.length; i++) {
    console.info("Here [i = 0] should be show the Politcs and Science and after [i = 1] show Football and Soccer");
}

我尝试创建另一个循环来搜索标签并使用标签 [1]、标签 [2] 等,但不起作用。

var tags = [];

for (var tag in posts[i].tags) {
     tags.push(tag);
}

有什么想法吗?

【问题讨论】:

    标签: javascript json es5-shim


    【解决方案1】:

    如果我理解的很好,你可以使用

    • 循环:

      var tags = [];
      for (var i = 0; i < posts.length; ++i) {
           tags.push(posts[i].tags);
      }
      
    • ES5map:

      var tags = posts.map(function(post){
          return post.tags;
      });
      
    • ES5 map + ES6 arrow functions:

      var tags = posts.map(post => post.tag);
      

    【讨论】:

      【解决方案2】:

      代码如下:

      var posts  = [
        {
           "id":"89319077059",
           "title":"Post Title 01",
           "tags":[
              "Politcs",
              "Science",
           ]
        },
        {
           "id":"89318918989",
           "title":"Post Title 02",
           "tags":[
              "Football",
              "Soccer",
           ]
        }
      ];
      
      var tags = [];
      
      for (var index in posts) {
          var tagsArray = posts[index].tags;
           tags.push(tagsArray);
      }
      console.log(tags);
      

      Jsbin

      【讨论】:

      • 注意for...in 循环被认为是迭代数组的不好方法。他们将迭代所有可枚举的属性,包括非数字属性和来自原型的属性。如果没有属性,则不会迭代 0 和 lenght-1 之间的整数,例如[0,,,,,5]
      • 我不知道!为什么,你能解释一下吗?
      • 感谢@OzerGul,但我会使用地图,Oriol 提示。
      【解决方案3】:

      试试这个,

      var posts = {"posts":[
        {
           "id":"89319077059",
           "title":"Post Title 01",
           "tags":[
              "Politcs",
              "Science",
           ]
        },
        {
           "id":"89318918989",
           "title":"Post Title 02",
           "tags":[
              "Football",
              "Soccer",
           ]
        },
      ]};
      
      
      var tags = [];
      
      for(var i=0;i<posts.posts.length;i++) {
          for(var j=0;j<posts.posts[i].tags.length;j++) {
              tags.push(posts.posts[i].tags[j]);
          }
      }
      
      console.log(tags);
      

      【讨论】:

      • 谢谢@Rashmin Javiya
      【解决方案4】:

      你可以尝试使用for循环:

      for (var i = 0; i < posts.length; i++) {
          for(var j = 0; j < posts[i].tags.length; j++) {
              console.log(posts[i].tags[j]);
          }
      }
      

      干杯。

      【讨论】:

        【解决方案5】:

        在您的 for (var tag in posts[i].tags) 循环中,tag 包含键,而不是值。

        所以一个快速的解决方法是:

        for (var tag in posts[i].tags) {
            tags.push(posts[i].tags[tag]);
        }
        

        但正如 Oriol 指出的那样,for..in 循环旨在遍历对象属性,而不是数组。

        只需像您的第一个循环一样使用for 循环。

        【讨论】:

          猜你喜欢
          • 2016-02-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-06-08
          • 1970-01-01
          • 2016-07-17
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多