Вернуть все значения массива в json

У меня есть 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 ответов

Решение

Если я хорошо понимаю, вы можете использовать

  • Loop:

    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 стрелка функции:

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

Вы можете попробовать использовать цикл 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]);
    }
}

Приветствия.

Вот код:

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

Попробуй это,

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

В вашем for (var tag in posts[i].tags) петли, tag содержит ключи, а не значения.

Таким образом, быстрое решение будет:

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

Но, как указал Ориол, for..in Циклы предназначены для перебора свойств объекта, а не массивов.

Просто используйте for петля, как ваш первый.

Другие вопросы по тегам