Javascript 按属性获取JSON对象
假设我有这个JSON对象:Javascript 按属性获取JSON对象,javascript,json,Javascript,Json,假设我有这个JSON对象: var images = {"success":"true", "images":[ {"id":"1234","url":"asdf","tags":["cookie","chocolate"]}, {"id":"5678","url":"qwer","tags":["pie","pumpkin"]} ]}; 获取id为5678的图像的url的最有效方法是什么?可以使用jQuery。因为它是一个数组,您要查找的是一个嵌入的属性,而不仅仅是一个简
var images = {"success":"true", "images":[
{"id":"1234","url":"asdf","tags":["cookie","chocolate"]},
{"id":"5678","url":"qwer","tags":["pie","pumpkin"]}
]};
获取id为5678的图像的url的最有效方法是什么?可以使用jQuery。因为它是一个数组,您要查找的是一个嵌入的属性,而不仅仅是一个简单的数组值,所以没有一种超高效的方法来查找它。这里有一种蛮力机制,只需遍历数组并将每个id与您要查找的id进行比较 如果要在同一数据结构中多次查找这类内容,并希望加快查找速度,则可以将现有数据结构转换为不同的数据结构,以便通过ID进行更高效的访问,如下所示:
var imagesById = {
"1234": {"url":"asdf","tags":["cookie","chocolate"]},
"5678": {"url":"qwer","tags":["pie","pumpkin"]}
}
然后,通过id查找对象就这么简单:
imagesById["1234"]
除非对ID进行排序,否则您不能比普通的旧迭代做得更好:
var images = {"success":"true", "images":[
{"id":"1234","url":"asdf","tags":["cookie","chocolate"]},
{"id":"5678","url":"qwer","tags":["pie","pumpkin"]}
]};
var inner = images.images,
targetId = '5678',
found = null;
for (var i=0; i<inner.length; i++) {
if (inner[i][id] === targetId) {
found = inner[i];
// do stuff...
break;
}
}
var images={“success”:“true”,“images”:[
{“id”:“1234”,“url”:“asdf”,“tags”:[“cookie”,“chocolate”]},
{“id”:“5678”,“url”:“qwer”,“tags”:[“pie”,“pumpking”]}
]};
var inner=images.images,
targetId='5678',
found=null;
对于(var i=0;i,您必须在数组中循环:
$.each(images.images,function(i,img) {
if(img.url == "5678") {
//do whatever you want with this url
}
}
你有多少个?如果只有几个(比如少于500个),那么不管你采取什么方法。可能会有几百种,但在某些情况下,最多可能有1000种。你能告诉我其中的任何一种方法吗?效率有多高并不重要,我只需要一些方法来完成工作。啊,+1用于放入另一个数据结构。我只做一次它首先获得JSON,以加速进一步的访问。我以前在jQuery!+1中没有听说过grep函数!
url = $.grep(images.images, function(item) { return item.id === '5678' })[0].url;