#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.