Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Доступ к элементу массива. (https://javascript.ru/forum/misc/45240-dostup-k-ehlementu-massiva.html)

jtjt1010 20.02.2014 16:03

Цитата:

Сообщение от рони
так чем вас неустроил этот вариант? или тайна сия велика есть

У тумбочки помимо цены есть еще и описание и цвет и т.д.
И организовывать данные по типу
price =  {тумбочка: 100, табуретка: 50};
color = {тумбочка: 'Коричневая', табуретка: 'Черная'};
desc = {тумбочка: 'Прикроватная', табуретка: 'Кухонная'};

Как-то не удобно.



Гораздо удобней так:
prices = [{
        id: 77,
        name: 'тумбочка',
        desc: 'Прикроватная',
        color: 'Черная',
        price: 900
    }, 
    {  id: 78,
        name: 'Табуретка',
        desc: 'Кухонная',
        color:'Коричневая',
        price: 400
    }];


Поэтому мне надо организовать удобный доступ к этому массиву. Понятно что выбирать я буду по id. Пример c name был приведен сходу, для примера.

kostyanet 20.02.2014 16:12

Цитата:

Сообщение от jtjt1010
price = {тумбочка: 100, табуретка: 50};
color = {тумбочка: 'Коричневая', табуретка: 'Черная'};
desc = {тумбочка: 'Прикроватная', табуретка: 'Кухонная'};

Если вы сами формируете ответ сервера то на кой что-то городить? Есть же json.

php

$r=$link->query($q);
$res=$r->fetch_assoc();
// тут православные заголовки
echo json_encode($res);

js/ajax

var row = JSON.parse(link.responsetext);

Юзайте. Получится именно как в последнем примере. В запросе регулируйте количество полей, конкатенацию, типы и все такое.

kostyanet 20.02.2014 16:14

Православные заголовки

header('Cache-Control: no-cache, must-revalidate');
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Content-type: application/json; charset=utf-8');

danik.js 20.02.2014 16:14

Цитата:

Сообщение от jtjt1010
Гораздо удобней так:

А чем удобней-то?
Вот это - другое дело:
var products = {
    'тумбочка': {
        id: 77,
        desc: 'Прикроватная',
        color: 'Черная',
        price: 900
    },
    'табуретка': {
        id: 78,
        desc: 'Кухонная',
        color:'Коричневая',
        price: 400
    }
};
alert(products['тумбочка'].price);
alert(products['табуретка'].color);

kostyanet 20.02.2014 16:43

Продукт идентифиуируется по id однозначно. Тумбочек может быть стопицот разных форм и размеров и цен.

То же самое, но кошерно:

Код:

$r=$link->query($q); // то есть какой-то запрос, в котором id непременно первой колонкой
$res=array();
while($arr=$r->fetch_assoc())
  $res[$arr['id']]=array_slice($arr, 1);

// получится примерно так

$res = array(
  78=>array(color=>red, price=>987);
  67=>array(color=>green, price=>780);
);

После жисона соответственно это объект где в каждой проперти по id лежит объект

var prod = products[elem.id.replace('id','')].price;

kostyanet 20.02.2014 16:48

Более того, грузить заранее может и не надо ничего кроме этих id. По ним как два пальца загрузить обширную строку со всем барахлом и тут же ее вставить куда надо.

Тфу блин, а же и рассуждал в парадигме аякса со всеми этими заголовками.

kostyanet 20.02.2014 16:58

Есть еще табличная структура, например $_FILES в нее компилятся.

var prods = {

id:[78, 35, 43],
color:['green', 'red', 'orange'],
price:[123, 456, 789]

};

Что дает? Например products.color это готовый список для select option. Если так хранится заказ то product.price - это готовый список для суммирования total'а

Адресация идеальна в циклах, директом - жопа.

index = products.id.indexOf(78);
color= products.color[index];

Можно дополнительно проиндексировать. У меня так и сделано, кстати, но на php.

Что дает? А например я получаю любую колонку по ее номеру через аякс с того же самого опупенного запроса, из которого запросы на все остальные колонки (идентификаторы) просто выкидываются, а табличная структура позволяет отгрузить результат той же продуктовой модели прямо в браузер. Кроме того трансформация (рендер) данных по колонкам гораздо эффективнее чем по строкам. Потому что на каждую колонку требуется отдельные, нередко изрядные опции. Например есть адрес сайт/tables/?p=1... туева хуча фильтров может быть, и буква j означает - идтикаты на аякс. значение j=3 означает выдай-ка всю четвертую колонку, только одну. Чпок и выдали. Юзер чпок и получил подсказку какие вообще в этой колонке могу быть уникальные значения. Потому что у него 15 страниц скажем.

kostyanet 20.02.2014 17:10

Да, тут я подумал прототипирование бы пригодилось. Табличную структуру засунуть в геттер и будет лепота.

jtjt1010 20.02.2014 17:31

Цитата:

Сообщение от danik.js
Вот это - другое дело:

Вот за это спасибо! То что надо.

рони 20.02.2014 17:35

kostyanet,
а лаконично по делу и без жаргона слабо?


Часовой пояс GMT +3, время: 12:09.