2014-11-01 24 views
0

Я играю с chart.js (http://www.chartjs.org). В настоящее время у меня есть линейный график на основе объекта ниже. Данные по оси X заполняются из массива, хранящегося как «x» в приведенном ниже примере. У меня есть два набора данных, которые являются двумя строками, показанными на моем графике. Данные Y-оси хранятся как «y» и «z» в приведенном ниже примере.Объект и массивы: изменение свойства объекта со ссылкой на второй объект (пример chart.js)

Я пытаюсь добавить некоторые функции, когда пользователь может показать только определенную строку или и то, и другое, если захотят.

Другими словами, добавьте или удалите экземпляр объекта в свойстве набора данных.

Мое понимание ниже структуры: все это объект с именем data; это имеет два свойства, называемые метками и наборами данных. Свойство datasets представляет собой массив экземпляров объектов. Является ли это правильным способом думать об этом?

var data = { 

    labels : x, 
    datasets : [ 
     { 
      fillColor : "rgba(222,223,179,0)", 
      strokeColor : "rgba(222,223,179,1)", 
      pointColor : "rgba(222,223,179,1)", 
      pointStrokeColor : "#fff", 
      data : y 
     }, 

     { 

      fillColor : "rgba(194,95,207,0)", 
      strokeColor : "rgba(194,95,207,1)", 
      pointColor : "rgba(194,95,207,1)", 
      pointStrokeColor : "#fff", 
      data : z 
     }, 

    ] 
} 

Я пытался решить мою проблему, создав объект dataSetReference, как показано ниже:

dataSetReference = [ 
    { 
     fillColor : "rgba(222,223,179,0)", 
     strokeColor : "rgba(222,223,179,1)", 
     pointColor : "rgba(222,223,179,1)", 
     pointStrokeColor : "#fff", 
     data : y 
    }, 

    { 

     fillColor : "rgba(194,95,207,0)", 
     strokeColor : "rgba(194,95,207,1)", 
     pointColor : "rgba(194,95,207,1)", 
     pointStrokeColor : "#fff", 
     data : z 
    }, 

] 

Затем ссылаться на него в моем исходном объекте данных, как

datasets: dataSetReference[0,1] 

или просто:

datasets: dataSetReference[0] 

T его не сработало. Любые предложения о том, почему нет?

ответ

0

вы должны знать, что не примитивных типов как объекты и массивов манипулируют их ссылки давайте рассмотрим простой пример, чтобы продемонстрировать это:

var a = [1,2,3]; 
var b = a; // now b point to the same reference as the a does,meaning any modification to b will be applied to a also 

// for example 
b.push(4); 
console.log(a); // you will get [1, 2, 3, 4] instead of [1, 2, 3] that we are expecting 

//so you can use only : 
datasets: dataSetReference 


//and if you want to access separate items from dataSetReference you can use .slice() method 

    var tmpvar = dataSetReference.slice(0,3,4) // now tmpvar = dataSetReference[0,3,4] 
+0

Спасибо. Любые предложения о том, как провести полный выбор элементов массива где-нибудь, а затем указать конкретные элементы в свойстве набора данных? В моем фактическом проекте есть 8 наборов данных, поэтому не нужно перечислять отдельные объекты для всех разных комбинаций. – DVCITIS

+0

Вы не хотите хранить 8 наборов данных (массив объектов) в переменной dataSetReference, что это? – Ismail

+0

Я думал, что это был бы достойный подход, если бы я мог ссылаться только на один или два из них, когда это было необходимо; ваш приведенный выше пример показал, что это было невозможно. Теперь он выглядит так, как будто мне нужен массив из восьми объектов, массив из двух объектов, массив из трех объектов и т. Д. И отдельные объекты, когда требуется только одна строка. Множество строк кода. – DVCITIS