Обработка массива объектов JSON

#javascript #json

#javascript #json

Вопрос:

У меня действительно простой вопрос:

Взгляните на эту строку JSON:

 this.objects = [{"pid":"2","x":"10","y":"10"}]; // only one i know
  

Теперь я хотел бы адресовать объект из него следующим образом:

  this.objects.pid[2]
  

Я знаю, что в этом случае это бессмысленно, поскольку вы могли бы получить к нему доступ следующим образом:

  this.objects[0]
  

Дело в том, что мне нужно адресовать массив объектов в JSON по идентификатору объекта, а не по индексу массива. Есть ли хороший подход к этому?

Спасибо!

Комментарии:

1. Я не могу понять вопрос.

Ответ №1:

 function getObject(id, array) {
    for (var i = 0; i < array.length; i  ) {
        if (array[i].pid ==  id) {
             return array[i]
        }
    }
}
  

Функция, которая принимает ваш идентификатор и массив и возвращает ваш объект. В основном, выполните цикл по массиву и найдите элемент с вашим идентификатором. Это может быть дополнительно кэшировано для увеличения скорости.

Комментарии:

1. надеюсь, это работает, спасибо. я просто заменил for на for (var i = 0; i < this.objects. длина; i ) {

2. @Mike не могу поверить, что я написал i < 0 . Спасибо, что заметили это. Ваш предполагаемый вызов getObject(2, this.objects)

Ответ №2:

Это не обязательно должен быть массив из одного элемента, поэтому попробуйте это…

 this.objects = {"pid":"2", "x":"10", "y":"10"};
  

И вы можете прочитать это любым из этих способов:

 this.objects.pid;
this.objects['pid'];
  

Если вам нужно несколько списков x, y и т.д., Тогда попробуйте что-то вроде этого:

 this.objects = { "2": {"x": "10", "y": "10"} };
this.objects["2"].x;
this.objects["2"]["x"];
  

По сути, в этом случае просто используйте «pid» в качестве ключа для каждого объекта, который содержит свойства, которые вы хотите для каждого элемента.

Комментарии:

1. спасибо, это сработало бы для shure, но я хочу сэкономить производительность на стороне сервера, поэтому я бы предпочел использовать подход на стороне clent от Raynos. Исходные данные поступают из базы данных через codeigniter.