Возвращает все значения массива в формате json

#javascript #json #es5-shim

#javascript #json #es5-прокладка

Вопрос:

У меня есть json со всеми публикациями в моем блоге, и я хочу вернуть все значения массива «теги». Итак, смотрите пример 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);
}
 

Есть идеи?

Ответ №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;
    });
     
  • Функции map стрелок ES5 ES6:
     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

Комментарии:

1. Примечание for...in Циклы считаются плохим способом перебора массивов. Они будут повторять все перечислимые свойства, включая нечисловые и те, которые исходят из prototype. И не будет выполнять итерацию целых чисел от 0 до length-1, если нет свойства, например [0,,,,,5]

2. Я этого не знал! Почему, вы можете объяснить?

3. Спасибо @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);
 

Комментарии:

1. Спасибо @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]);
}
 

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

Просто используйте for цикл, подобный вашему первому.