我无法解决这个问题。我搜索并找到了类似问题的几个答案,但所有示例中的JSON数据都太简单了。我的比较复杂。
我有一系列数字,我正在循环。对于每个循环,我需要将数字与我的JSON数据匹配以查找匹配的条目,然后从该条目获取特定的键值。
这是我的数组的一个例子:
results = [377, 375, 373, 353, 355]
这是我的JSON数据的一个例子:
{
"count": 10,
"posts": [
{
"title": "Title of Post",
"attachments": [
{
"id": 377,
"images": {
"full": {
"url": "http://example.com/images/foo.jpg",
"width": 800,
"height": 600
},
"thumbnail": {
"url": "http://example.com/images/foo_thumb.jpg",
"width": 150,
"height": 150
}
}
},
{
"id": 355,
"images": {
"full": {
"url": "http://example.com/images/bar.jpg",
"width": 800,
"height": 600
},
"thumbnail": {
"url": "http://example.com/images/bar_thumb.jpg",
"width": 150,
"height": 150
}
}
}
]
},
// 9 more posts...
]
}
对于results
中的每个号码,我需要将其与每个posts.attachments.id
匹配。因此,在这种情况下,377
和355
是匹配项。对于所有匹配的附件,我需要抓取其full
和thumbnail
网址。
就像我说的,我已经找到了可能的解决方案,但示例数据只有1-2级深度。我不能完全围绕这个特定场景所需的循环。
答案 0 :(得分:1)
var urls = [];
var att = posts.attachments;
for (var i = 0; i < results.length; i++) {
var id = results[i];
for (var j = 0; j < att.length; j++) {
if (att[j].id == id) {
urls.push({
id: id,
full: att[j].images.full.url,
thumbnail: att[j].images.thumbnail.url
});
break;
}
}
}
答案 1 :(得分:0)
var urls = [];
results.forEach(function(result){
posts.forEach(function(post){
post.attachments.every(function(attachment){
if(result === attachment.id) {
urls.push({
id: attachment.id,
full: attachment.images.full.url,
thumbnail: attachment.images.thumbnail.url
});
return false;
}
return true;
});
});
});
这里有很多嵌套的foreach循环,你应该始终保持最小, 但这一切都可以归结为您的数据有多大以及未来的数据。
forEach
是一个原生的javascript函数,imo使它比传统的for循环更具可读性。 every
方法允许您通过返回false来中断循环,因此除非匹配数组中的最后一个元素,否则不必遍历整个列表。