2012-05-30 5 views
1

Say Я предоставляется объект JSON, который выглядит следующим образом:находкой порядковый номер элемента JSon

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

Я хочу, чтобы выяснить, что порядковый номер элемента текущего «someList» Я на. У меня есть someList идентификатор товара и представлен вар помощи и равна: 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

Но он чувствует себя неэффективно, и мне интересно, как он будет работать, если бы существовали тысячи возможностей. Может ли кто-то повлиять на то, действительно ли это - лучший способ достичь того, что я хочу сделать, и проверить или опровергнуть предположение, что это хороший способ выполнить эту задачу?

+1

Лучше всего изменить JSON как просто массив чисел. Это была бы самая эффективная вещь для синтаксического анализа: 'Array.indexOf' тогда было бы достаточно. – lonesomeday

ответ

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; 
+0

фантастический совет. Для тех, кто ищет эту тему, имеет смысл отбросить назад и получить js в формате, который имеет смысл вот так. Меньше кода для написания, меньше работы для веб-страницы. Я использовал someValues ​​= {"21154859": {index: 0}, "21154859": {index: 1} ' – user995719

+0

Я говорил слишком рано. Похоже, что этот формат недействителен json – user995719

+0

Bergi Я начал эту дорогу, пытаясь быть явным с номерами индексов. Но я не могу прочитать json-файл, потому что он не проверяется. Если вы выберете код json и проверьте инструмент линта, он не работает. Я что-то упускаю? – user995719

2

вы можете попробовать это:

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

где someList является JSON массив.

Смежные вопросы