返回json中数组的所有值

时间:2014-06-21 18:51:34

标签: javascript json es5-shim

我有一个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);
}

有什么想法吗?

5 个答案:

答案 0 :(得分:1)

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

  • 循环:

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

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

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

答案 1 :(得分:1)

这是代码:

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

答案 2 :(得分:1)

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循环。

答案 3 :(得分:1)

试试这个,

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);

答案 4 :(得分:1)

您可以尝试使用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]);
    }
}

干杯。