找到json元素的索引号

时间:2012-05-30 22:39:42

标签: javascript json

假设我正在提供一个看起来像这样的json对象:

{"someList": [{"id": "21154859" },{"id": "21154865" },{"id": "21154856" },{"id": "21154870" }]}

我想找出当前'someList'项目的索引号是什么。 我有someList项id,它由var辅助和等于:21154856。

表示

我创建了一个像这样的函数:

$.getJSON( url, function( data ) {
var jsonLength = data.someList.length;
for ( i=1; i <= jsonLength; i++ ){
        chx = data.someList[i].id;
        if(chx === aid){
            var currentidno = Number(i) + 1;
            $('#page').html('').append(currentidno + ' of ' + jsonLength);
            break;
        }
        }
});

当我设置它时它工作正常并给我一个这样的结果: 3/4

但感觉效率低下,我想知道如果有成千上万的可能性它会如何表现。有人可以权衡这是否是实现我想做的最佳方式,并验证或否认这是完成任务的好方法的假设?

2 个答案:

答案 0 :(得分:2)

你可以试试这个:

jQuery(someList).index({"id": "21154859" });

其中someList是JSON数组。

答案 1 :(得分:0)

没有。循环只是要走的路。但是,如果您需要经常在许多元素上进行搜索,那么构建索引可能会有效(或者如果没有其他属性,只需一次将JSON作为数组传递):

var indexArray = data.someList.map(function(o){return o.id;});
var currentidno = indexArray.indexOf(aid) + 1;

或者您可以通过对象属性而不是数组进行索引:

someValues = {"21154859":{index:0},"21154865":{index:1},"21154856":{index:2},"21154870":{index:3},... }; 
// no order needed!
var currentidno = someValues[aid].index + 1;