1

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

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

我想找出我所在的当前“someList”项目的索引号。我有 someList 项目 ID,它由 varaid 表示,等于: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 of 4

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

4

2 回答 2

2

你可以试试这个:

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

其中 someList 是 JSON 数组。

于 2014-04-14T16:28:31.333 回答
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;
于 2012-05-30T22:46:47.223 回答