Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/476.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 按属性获取JSON对象_Javascript_Json - Fatal编程技术网

Javascript 按属性获取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。因为它是一个数组,您要查找的是一个嵌入的属性,而不仅仅是一个简

假设我有这个JSON对象:

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;