Как я могу отфильтровать JSON и получить средства для создания линейного графика в JS? - PullRequest
1 голос
/ 30 сентября 2019

У меня есть данные в формате json, поэтому я хочу построить график с плотностью js, мне нужно создать график разных штатов к семестру, поэтому мне нужно отфильтровать каждое состояние (например, Калифорния), после чего мне нужно получитьсреднее значение каждого семестра и, наконец, построение графика.

Пока у меня есть этот код, но я не знаю, как отфильтровать новое в js

// Trace1 
var trace1 = {
  x: data.map(row => row.date),
  y: data.map(row => row.snap_biannual_chan),
  text: data.map(row => row.state_name),
  name: "snap_biannual_chan",
  type: "line"
};

// Combining both traces
var data = [trace1];

// Apply the group barmode to the layout
var layout = {
  title: "Practice",
  xaxis: {
    categoryorder: "array",
  }
};

// Render the plot to the div tag with id "plot"
Plotly.newPlot("plot", data, layout)

, это пример json:

"county_state_id": "06001", "pop_hispan_prop": ".1176472187212034", "pop_un_st": 3059000, "state_name": "California", "county_name": "Alameda County", "pop_un_co": 109000, "state_id": "06", "county_id": "001", "pop_co": 1605217, "pop_st": 38654206, "state_abbrev": "CA", "semester": "0118", "snap_beneficiaries": 102034, "snap_biannual_chan": -2.02980374083036, "sem": "Jan18", "pop_un_co_per": 6.790359185082141, "pop_un_st_per": 7.913757173022776, "год": 2018, "месяц": 1, "дата": "январь 2018" "

1 Ответ

1 голос
/ 30 сентября 2019

Вы можете использовать методы массива filter() и reduce() для вычисления среднего значения без необходимости микроуправления группой циклов и переменных. Вот пример:

const data = [
  { state_id: "01", snap_biannual_chan: 5.5 },
  { state_id: "01", snap_biannual_chan: 3 },
  { state_id: "02", snap_biannual_chan: 5 }
];

const state01 = data.filter(x => x.state_id === "01");
const meanState01 = state01.reduce((acc, item) => {
  acc.sum += item.snap_biannual_chan;
  acc.mean = acc.sum / state01.length 
  return acc;
}, { sum: 0, mean: 0 });

console.log(meanState01);
console.log("the mean: ", meanState01.mean);
...