#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:
Если я хорошо понимаю это, вы можете использовать
Ответ №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);
Комментарии:
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
цикл, подобный вашему первому.