Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   как сформировать свойство функции (https://javascript.ru/forum/dom-window/56380-kak-sformirovat-svojjstvo-funkcii.html)

imedia 12.06.2015 23:32

как сформировать свойство функции
 
Есть свойство функции
data: [
{ year: '2008', value: 20 },
    { year: '2009', value: 10 },
    { year: '2010', value: 5 },
    { year: '2011', value: 5 },
    { year: '2012', value: 20 }  */
  ],

как его записать в таком виде из следующего массива array? Чтобы получать это свойство динамически?
'0' :
        'year' => "4"
        'value' => "100"
    '1' :
        'year' => "100"
        'value' => "200"
    '2' :
        'year' => "8"
        'value' => "100"
    '3' :
        'year' => "19"
        'value' => "300"

Sigizmund2012 13.06.2015 09:05

imedia,
Я в php не силён, но думаю массив нужно пробегать foreach, который будет формировать новый ассоциативный массив и для значений year запускать функцию, которая будет их в года преобразовывать. Только входящий массив странный какой-то, вот это 'year' => "100" в какой год должно преобразоваться?
Далее echo json_encode($arr); На клиенте JSON.parse(str) и присобачиваете полученный массив объектов как свойство своей функции.

imedia 13.06.2015 10:06

это javascript, а вопрос именно в том как присобачить
new Morris.Line({
  // ID of the element in which to draw the chart.
  element: 'myfirstchart',
  // Chart data records -- each entry in this array corresponds to a point on
  // the chart.
  data: [
{ year: '2008', value: 20 },
    { year: '2009', value: 10 },
    { year: '2010', value: 5 },
    { year: '2011', value: 5 },
    { year: '2012', value: 20 }  */
  ],
  // The name of the data record attribute that contains x-values.
  xkey: 'year',
  // A list of names of data record attributes that contain y-values.
  ykeys: ['value'],
  // Labels for the ykeys -- will be displayed when you hover over the
  // chart.
  labels: ['Value']
});

года странные в массиве но это не имеет значение, просто числа там проходят

Sigizmund2012 13.06.2015 11:01

imedia,
data это не свойство функции, а свойство объекта, который передаётся конструктору Morris.Line в качестве аргумента. Изменить этот объект можно до передачи его в функцию. Как-то так:
var options = {
  // ID of the element in which to draw the chart.
  element: 'myfirstchart',
  // Chart data records -- each entry in this array corresponds to a point on
  // the chart.
  data: [
    { year: '2008', value: 20 },
    { year: '2009', value: 10 },
    { year: '2010', value: 5 },
    { year: '2011', value: 5 },
    { year: '2012', value: 20 } 
  ],
  // The name of the data record attribute that contains x-values.
  xkey: 'year',
  // A list of names of data record attributes that contain y-values.
  ykeys: ['value'],
  // Labels for the ykeys -- will be displayed when you hover over the
  // chart.
  labels: ['Value']
};

options.data = [
    { year: '2013', value: 25 },
    { year: '2009', value: 10 },
    { year: '3010', value: 50 },
    { year: '2051', value: 4 },
    { year: '2012', value: 20 } 
  ];

new Morris.Line( options );

imedia 13.06.2015 11:45

да но у меня есть массив array
'0' :
        'year' => "4"
        'value' => "100"
    '1' :
        'year' => "100"
        'value' => "200"
    '2' :
        'year' => "8"
        'value' => "100"
    '3' :
        'year' => "19"
        'value' => "300"

как именно его прировнять к этому options.data формату, и к тому же ваш вариант не переопределяет массив значений

Sigizmund2012 13.06.2015 12:34

Цитата:

Сообщение от imedia
и к тому же ваш вариант не переопределяет массив значений

А это что тогда?:
options.data = [
    { year: '2013', value: 25 },
    { year: '2009', value: 10 },
    { year: '3010', value: 50 },
    { year: '2051', value: 4 },
    { year: '2012', value: 20 } 
  ];

Цитата:

Сообщение от imedia
как именно его прировнять к этому options.data формату

Посылаете ajax запрос, на сервере через json_encode($arr) превращаете ваш массив в строку и отсылаете клиенту, в браузере через JSON.parse(request.responseText) получаете массив и присваиваете options.data

imedia 13.06.2015 13:05

массив уже в яваскрипте как его присвоить option.data ? покажите на примере он же с основными ключами, и у вас все таки option.data не переопределяет, сейчас выложу сам фреймворк по построению графиков

imedia 13.06.2015 13:06

<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/morris.js/0.5.1/morris.css">
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/raphael/2.1.0/raphael-min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/morris.js/0.5.1/morris.min.js"></script>

<div id="myfirstchart" style="height: 250px;"></div>
<script>
new Morris.Line({
  // ID of the element in which to draw the chart.
  element: 'myfirstchart',
  // Chart data records -- each entry in this array corresponds to a point on
  // the chart.
  data: [
    { year: '2008', value: 20 },
    { year: '2009', value: 10 },
    { year: '2010', value: 5 },
    { year: '2011', value: 5 },
    { year: '2012', value: 20 }
  ],
  // The name of the data record attribute that contains x-values.
  xkey: 'year',
  // A list of names of data record attributes that contain y-values.
  ykeys: ['value'],
  // Labels for the ykeys -- will be displayed when you hover over the
  // chart.
  labels: ['Value']
});
options.data = [
    { year: '2013', value: 25 },
    { year: '2009', value: 10 },
    { year: '3010', value: 50 },
    { year: '2051', value: 4 },
    { year: '2012', value: 20 }
  ];
 
new Morris.Line( options );
</script>

Видите нет переопределения

Sigizmund2012 13.06.2015 13:26

imedia,
Вот так надо:
<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/morris.js/0.5.1/morris.css">
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/raphael/2.1.0/raphael-min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/morris.js/0.5.1/morris.min.js"></script>

<div id="myfirstchart" style="height: 250px;"></div>


<script>

var options = {
  // ID of the element in which to draw the chart.
  element: 'myfirstchart',
  // Chart data records -- each entry in this array corresponds to a point on
  // the chart.
  data: [
    { year: '2008', value: 20 },
    { year: '2009', value: 10 },
    { year: '2010', value: 5 },
    { year: '2011', value: 5 },
    { year: '2012', value: 20 } 
  ],
  // The name of the data record attribute that contains x-values.
  xkey: 'year',
  // A list of names of data record attributes that contain y-values.
  ykeys: ['value'],
  // Labels for the ykeys -- will be displayed when you hover over the
  // chart.
  labels: ['Value']
};

options.data = [
    { year: '2013', value: 25 },
    { year: '2009', value: 10 },
    { year: '3010', value: 50 },
    { year: '2051', value: 4 },
    { year: '2012', value: 20 } 
  ];

new Morris.Line( options );


</script>

Sigizmund2012 13.06.2015 13:29

imedia,
'0' :
        'year' => "4"
        'value' => "100"
    '1' :
        'year' => "100"
        'value' => "200"
    '2' :
        'year' => "8"
        'value' => "100"
    '3' :
        'year' => "19"
        'value' => "300"

Такая форма массива характерна только для php, js ошибку выдаст, он не знает что такое =>.


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